| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim syntax file | 
					
						
							|  |  |  | " Language:	sed | 
					
						
							|  |  |  | " Maintainer:	Haakon Riiser <hakonrk@fys.uio.no> | 
					
						
							|  |  |  | " URL:		http://folk.uio.no/hakonrk/vim/syntax/sed.vim | 
					
						
							| 
									
										
										
										
											2005-12-16 21:49:31 +00:00
										 |  |  | " Last Change:	2005 Dec 15 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " For version 5.x: Clear all syntax items | 
					
						
							|  |  |  | " For version 6.x: Quit when a syntax file was already loaded | 
					
						
							|  |  |  | if version < 600 | 
					
						
							|  |  |  |     syn clear | 
					
						
							|  |  |  | elseif exists("b:current_syntax") | 
					
						
							|  |  |  |     finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn match sedError	"\S" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn match sedWhitespace "\s\+" contained | 
					
						
							|  |  |  | syn match sedSemicolon	";" | 
					
						
							|  |  |  | syn match sedAddress	"[[:digit:]$]" | 
					
						
							|  |  |  | syn match sedAddress	"\d\+\~\d\+" | 
					
						
							|  |  |  | syn region sedAddress   matchgroup=Special start="[{,;]\s*/\(\\/\)\="lc=1 skip="[^\\]\(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta | 
					
						
							|  |  |  | syn region sedAddress   matchgroup=Special start="^\s*/\(\\/\)\=" skip="[^\\]\(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta | 
					
						
							|  |  |  | syn match sedComment	"^\s*#.*$" | 
					
						
							| 
									
										
										
										
											2005-12-16 21:49:31 +00:00
										 |  |  | syn match sedFunction	"[dDgGhHlnNpPqQx=]\s*\($\|;\)" contains=sedSemicolon,sedWhitespace | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | syn match sedLabel	":[^;]*" | 
					
						
							|  |  |  | syn match sedLineCont	"^\(\\\\\)*\\$" contained | 
					
						
							|  |  |  | syn match sedLineCont	"[^\\]\(\\\\\)*\\$"ms=e contained | 
					
						
							|  |  |  | syn match sedSpecial	"[{},!]" | 
					
						
							|  |  |  | if exists("highlight_sedtabs") | 
					
						
							|  |  |  |     syn match sedTab	"\t" contained | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Append/Change/Insert | 
					
						
							|  |  |  | syn region sedACI	matchgroup=sedFunction start="[aci]\\$" matchgroup=NONE end="^.*$" contains=sedLineCont,sedTab | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn region sedBranch	matchgroup=sedFunction start="[bt]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace | 
					
						
							|  |  |  | syn region sedRW	matchgroup=sedFunction start="[rw]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Substitution/transform with various delimiters | 
					
						
							|  |  |  | syn region sedFlagwrite	    matchgroup=sedFlag start="w" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace contained | 
					
						
							|  |  |  | syn match sedFlag	    "[[:digit:]gpI]*w\=" contains=sedFlagwrite contained | 
					
						
							|  |  |  | syn match sedRegexpMeta	    "[.*^$]" contained | 
					
						
							|  |  |  | syn match sedRegexpMeta	    "\\." contains=sedTab contained | 
					
						
							|  |  |  | syn match sedRegexpMeta	    "\[.\{-}\]" contains=sedTab contained | 
					
						
							|  |  |  | syn match sedRegexpMeta	    "\\{\d\*,\d*\\}" contained | 
					
						
							|  |  |  | syn match sedRegexpMeta	    "\\(.\{-}\\)" contains=sedTab contained | 
					
						
							|  |  |  | syn match sedReplaceMeta    "&\|\\\($\|.\)" contains=sedTab contained | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Metacharacters: $ * . \ ^ [ ~ | 
					
						
							|  |  |  | " @ is used as delimiter and treated on its own below | 
					
						
							|  |  |  | let __at = char2nr("@") | 
					
						
							|  |  |  | let __sed_i = char2nr(" ") | 
					
						
							|  |  |  | if has("ebcdic") | 
					
						
							|  |  |  |     let __sed_last = 255 | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     let __sed_last = 126 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | let __sed_metacharacters = '$*.\^[~' | 
					
						
							|  |  |  | while __sed_i <= __sed_last | 
					
						
							|  |  |  |     let __sed_delimiter = escape(nr2char(__sed_i), __sed_metacharacters) | 
					
						
							|  |  |  | 	if __sed_i != __at | 
					
						
							|  |  |  | 	    exe 'syn region sedAddress matchgroup=Special start=@\\'.__sed_delimiter.'\(\\'.__sed_delimiter.'\)\=@ skip=@[^\\]\(\\\\\)*\\'.__sed_delimiter.'@ end=@'.__sed_delimiter.'I\=@ contains=sedTab' | 
					
						
							|  |  |  | 	    exe 'syn region sedRegexp'.__sed_i  'matchgroup=Special start=@'.__sed_delimiter.'\(\\\\\|\\'.__sed_delimiter.'\)*@ skip=@[^\\'.__sed_delimiter.']\(\\\\\)*\\'.__sed_delimiter.'@ end=@'.__sed_delimiter.'@me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement'.__sed_i | 
					
						
							|  |  |  | 	    exe 'syn region sedReplacement'.__sed_i 'matchgroup=Special start=@'.__sed_delimiter.'\(\\\\\|\\'.__sed_delimiter.'\)*@ skip=@[^\\'.__sed_delimiter.']\(\\\\\)*\\'.__sed_delimiter.'@ end=@'.__sed_delimiter.'@ contains=sedTab,sedReplaceMeta keepend contained nextgroup=sedFlag' | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  |     let __sed_i = __sed_i + 1 | 
					
						
							|  |  |  | endwhile | 
					
						
							|  |  |  | syn region sedAddress matchgroup=Special start=+\\@\(\\@\)\=+ skip=+[^\\]\(\\\\\)*\\@+ end=+@I\=+ contains=sedTab,sedRegexpMeta | 
					
						
							|  |  |  | syn region sedRegexp64 matchgroup=Special start=+@\(\\\\\|\\@\)*+ skip=+[^\\@]\(\\\\\)*\\@+ end=+@+me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement64 | 
					
						
							|  |  |  | syn region sedReplacement64 matchgroup=Special start=+@\(\\\\\|\\@\)*+ skip=+[^\\@]\(\\\\\)*\\@+ end=+@+ contains=sedTab,sedReplaceMeta keepend contained nextgroup=sedFlag | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Since the syntax for the substituion command is very similar to the | 
					
						
							|  |  |  | " syntax for the transform command, I use the same pattern matching | 
					
						
							|  |  |  | " for both commands.  There is one problem -- the transform command | 
					
						
							|  |  |  | " (y) does not allow any flags.  To save memory, I ignore this problem. | 
					
						
							|  |  |  | syn match sedST	"[sy]" nextgroup=sedRegexp\d\+ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if version >= 508 || !exists("did_sed_syntax_inits") | 
					
						
							|  |  |  |     if version < 508 | 
					
						
							|  |  |  | 	let did_sed_syntax_inits = 1 | 
					
						
							|  |  |  | 	command -nargs=+ HiLink hi link <args> | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  | 	command -nargs=+ HiLink hi def link <args> | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     HiLink sedAddress		Macro | 
					
						
							|  |  |  |     HiLink sedACI		NONE | 
					
						
							|  |  |  |     HiLink sedBranch		Label | 
					
						
							|  |  |  |     HiLink sedComment		Comment | 
					
						
							|  |  |  |     HiLink sedDelete		Function | 
					
						
							|  |  |  |     HiLink sedError		Error | 
					
						
							|  |  |  |     HiLink sedFlag		Type | 
					
						
							|  |  |  |     HiLink sedFlagwrite		Constant | 
					
						
							|  |  |  |     HiLink sedFunction		Function | 
					
						
							|  |  |  |     HiLink sedLabel		Label | 
					
						
							|  |  |  |     HiLink sedLineCont		Special | 
					
						
							|  |  |  |     HiLink sedPutHoldspc	Function | 
					
						
							|  |  |  |     HiLink sedReplaceMeta	Special | 
					
						
							|  |  |  |     HiLink sedRegexpMeta	Special | 
					
						
							|  |  |  |     HiLink sedRW		Constant | 
					
						
							|  |  |  |     HiLink sedSemicolon		Special | 
					
						
							|  |  |  |     HiLink sedST		Function | 
					
						
							|  |  |  |     HiLink sedSpecial		Special | 
					
						
							|  |  |  |     HiLink sedWhitespace	NONE | 
					
						
							|  |  |  |     if exists("highlight_sedtabs") | 
					
						
							|  |  |  | 	HiLink sedTab		Todo | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  |     let __sed_i = 32 | 
					
						
							|  |  |  |     while __sed_i <= 126 | 
					
						
							|  |  |  | 	exe "HiLink sedRegexp".__sed_i		"Macro" | 
					
						
							|  |  |  | 	exe "HiLink sedReplacement".__sed_i	"NONE" | 
					
						
							|  |  |  | 	let __sed_i = __sed_i + 1 | 
					
						
							|  |  |  |     endwhile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     delcommand HiLink | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unlet __sed_i __sed_delimiter __sed_metacharacters | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let b:current_syntax = "sed" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " vim: sts=4 sw=4 ts=8 |