summaryrefslogtreecommitdiff
path: root/ftplugin/preseed.vim
blob: 7b4e1ed8fb14974f0167176ef18e34aa921bed64 (plain)
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
" Vim syntax file
" Language:	Debian preseed
" Maintainer:	cos <cos>, https://www.netizen.se/#contact
" Last Change:	2023 Oct 13
" Remark:	https://wiki.debian.org/DebianInstaller/Preseed

" quit when a syntax file was already loaded
if exists('b:current_syntax')
  finish
endif


" The syntax of each line in a preseed file follows:
" <owner> <question name> <question type> <value>

" Create clusters for two of these four parts of a preseed line.
syntax cluster preseedSecond contains=preseedQuestion,preseedOwnerLC
syntax cluster preseedThird contains=preseedBooleanType,
  \ preseedStrLikeType,
  \ preseedMultiSelType,
  \ preseedNote,
  \ preseedSelectType,
  \ preseedQuestionLC


" Define the highlighting. Doesn't map perfectly to the group's intents, but
" arguably close enough?

" First, <owner>
hi! def link preseedOwner        Label

" Second, <question name>
hi! def link preseedQuestion     Identifier

" Third, <question type>
hi! def link preseedBooleanType  Type
hi! def link preseedMultiSelType Type
hi! def link preseedNote         Type
hi! def link preseedSelectType   Type
hi! def link preseedStrLikeType  Type

" Fourth, <value>
hi! def link preseedBooleanVal   Special
hi! def link preseedMultiSelVal  Special
hi! def link preseedStrLikeVal   String
hi! def link preseedVal          String
hi! def link preseedSelectVal    Special
hi! def link preseedMultiSelSep  Operator
hi! def link preseedComment      Comment

" Line Continuation
hi! def link preseedOwnerLC      Operator
hi! def link preseedQuestionLC   Operator
hi! def link preseedBooleanLC    Operator
hi! def link preseedMultiSelLC   Operator
hi! def link preseedStrLikeLC    Operator


" Add the syntax matching rules.

" First, <owner>
sy match preseedOwner              /^\s*[[:alnum:]_-]\+\(\s\|$\)/
  \ nextgroup=@preseedSecond,preseedOwnerLC

" Second, <question name>
sy match preseedQuestion contained
  \ "\s*\([[:alnum:]_-]\+/\)\+[[:alnum:]_-]\+\(\s\|$\)"
  \ nextgroup=@preseedThird,preseedQuestionLC

" Third, <question type>
" (boolean, multiselect, note, password, select, string)
sy match preseedBooleanType contained /\s*boolean\(\s\|$\)/
  \ nextgroup=preseedBooleanVal,preseedBooleanLC
sy match preseedMultiSelType contained /\s*multiselect\(\s\|$\)/
  \ nextgroup=preseedMultiSelVal,preseedMultiSelLC
sy match preseedNote contained /\s*note$/
sy match preseedSelectType contained /\s*select\(\s\|$\)/
  \ nextgroup=preseedSelectVal,preseedSelectLC
sy match preseedStrLikeType contained /\s*\(password\|string\)\(\s\|$\)/
  \ nextgroup=preseedStrLikeVal,preseedStrLikeLC


" Fourth, <value>
sy match preseedBooleanVal contained /\s*\(false\|true\)/
sy match preseedMultiSelVal contained /.*/me=e
  \ contains=preseedMultiSelSep
sy match preseedMultiSelVal contained /.*\\/me=e-1
  \ contains=preseedMultiSelSep nextgroup=preseedMultiSelLC
sy match preseedMultiSelSep contained /,/
sy match preseedSelectVal contained /.*/
sy match preseedStrLikeVal contained /.*/me=e
sy match preseedStrLikeVal contained /.*\\/me=e-1
  \ nextgroup=preseedStrLikeLC


" Line continuation needs to be down here override everything other syntax.
sy match preseedBooleanLC contained /\s*\\$/
  \ nextgroup=preseedBooleanVal,preseedBooleanLC skipnl
sy match preseedMultiSelLC contained /\\$/ nextgroup=preseedMultiSelVal skipnl
sy match preseedOwnerLC contained /\s*\\$/ nextgroup=@preseedSecond skipnl
sy match preseedQuestionLC contained /\s*\\$/ nextgroup=@preseedThird skipnl
sy match preseedSelectLC contained /\s*\\$/
  \ nextgroup=preseedSelectVal,preseedSelectLC skipnl
sy match preseedStrLikeLC contained /\\$/ nextgroup=preseedStrLikeVal skipnl

" And comments must override everything else.
sy match preseedComment /^\s*#.*/