summaryrefslogtreecommitdiff
path: root/syntax/preseed.vim
diff options
context:
space:
mode:
Diffstat (limited to 'syntax/preseed.vim')
-rw-r--r--syntax/preseed.vim69
1 files changed, 48 insertions, 21 deletions
diff --git a/syntax/preseed.vim b/syntax/preseed.vim
index 4690280..5b41c74 100644
--- a/syntax/preseed.vim
+++ b/syntax/preseed.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Debian preseed
" Maintainer: cos <cos>, https://www.netizen.se/#contact
-" Last Change: 2023 Nov 2
+" Last Change: 2023 Nov 10
" Remark: https://wiki.debian.org/DebianInstaller/Preseed
" quit when a syntax file was already loaded
@@ -9,6 +9,17 @@ if exists('b:current_syntax')
finish
endif
+" Allow user defined questions to have their shell script argument highlighted
+" as sh. Please see ':help preseed_add_sh_pattern' for an example.
+let s:shell_question_pattern = '\(preseed/\(early_command\|include_command\|late_command\)\|partman/early_command\)'
+let shell_pattern_start='^\s*[[:alnum:]._-]\+\s\+'
+if exists('preseed_add_sh_pattern')
+ let shell_pattern_start ..= '\(' . s:shell_question_pattern . '\|' . preseed_add_sh_pattern . '\) string'
+else
+ let shell_pattern_start ..= s:shell_question_pattern . ' string'
+endif
+let shell_pattern_end='\([^\\]$\|^$\)'
+
" The syntax of each line in a preseed file follows:
" <owner> <question name> <question type> <value>
" Lets sloppily refer to them as columns.
@@ -34,38 +45,47 @@ endif
syntax cluster preseedSecond contains=preseedQuestion,preseedOwnerLC
syntax cluster preseedThird contains=preseedBooleanType,preseedStrLikeType,preseedMultiSelType,preseedNote,preseedSelectType,preseedQuestionLC
+" Highlight shell syntax for include_command and friends. This is not fully
+" correct for multi-line arguments, as line continuations are flattened prior
+" to the argument being given to the shell as one single line. Reusing sh.vim
+" gets close enough to be useful though. Any patches with improvements are
+" welcome.
+syntax include @Sh syntax/sh.vim
" Define the highlighting. Doesn't map perfectly to the group's intents, but
" arguably close enough?
" First column, <owner>
-hi! def link preseedOwner Label
+hi! def link preseedOwner Label
+hi! def link preseedShellOwner Label
" Second column, <question name>
-hi! def link preseedQuestion Identifier
+hi! def link preseedQuestion Identifier
+hi! def link preseedShellQuestion Special
+hi! def link preseedShellStr Type
" Third column, <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
+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 column, <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
+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
+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.
@@ -95,7 +115,7 @@ 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.
+" Line continuation needs to be down here override 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
@@ -103,5 +123,12 @@ sy match preseedQuestionLC contained /\s*\\$/ nextgroup=@preseedThird skipnl
sy match preseedSelectLC contained /\s*\\$/ nextgroup=preseedSelectVal,preseedSelectLC skipnl
sy match preseedStrLikeLC contained /\\$/ nextgroup=preseedStrLikeVal skipnl
+" Argument to some questions is embedded shell script code.
+execute 'syn region preseedShell start="' . shell_pattern_start . '"' . ' end="' . shell_pattern_end . '" contains=preseedShellOwner,@Sh'
+syn region notShell start="whatever" end='\([^\x5c]\$\|^$\)' contains=preseedShellOwner,@Sh
+sy match preseedShellOwner contained /^\s*[[:alnum:]._-]\+\(\s\|$\)/ nextgroup=preseedShellQuestion
+sy match preseedShellQuestion contained "\s*\([[:alnum:]._-]\+/\)\+[[:alnum:]._-]\+\(\s\|$\)" nextgroup=preseedShellStr
+sy match preseedShellStr contained /string/
+
" And comments must override everything else.
sy match preseedComment /^\s*#.*/