mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			108 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:	printcap/termcap database | ||
|  | " Maintainer:	Haakon Riiser <hakonrk@fys.uio.no> | ||
|  | " URL:		http://folk.uio.no/hakonrk/vim/syntax/ptcap.vim | ||
|  | " Last Change:	2001 May 15 | ||
|  | 
 | ||
|  | " 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 | ||
|  | 
 | ||
|  | " Since I only highlight based on the structure of the databases, not | ||
|  | " specific keywords, case sensitivity isn't required | ||
|  | syn case ignore | ||
|  | 
 | ||
|  | " Since everything that is not caught by the syntax patterns is assumed | ||
|  | " to be an error, we start parsing 20 lines up, unless something else | ||
|  | " is specified | ||
|  | if exists("ptcap_minlines") | ||
|  |     exe "syn sync lines=".ptcap_minlines | ||
|  | else | ||
|  |     syn sync lines=20 | ||
|  | endif | ||
|  | 
 | ||
|  | " Highlight everything that isn't caught by the rules as errors, | ||
|  | " except blank lines | ||
|  | syn match ptcapError	    "^.*\S.*$" | ||
|  | 
 | ||
|  | syn match ptcapLeadBlank    "^\s\+" contained | ||
|  | 
 | ||
|  | " `:' and `|' are delimiters for fields and names, and should not be | ||
|  | " highlighted.	Hence, they are linked to `NONE' | ||
|  | syn match ptcapDelimiter    "[:|]" contained | ||
|  | 
 | ||
|  | " Escaped characters receive special highlighting | ||
|  | syn match ptcapEscapedChar  "\\." contained | ||
|  | syn match ptcapEscapedChar  "\^." contained | ||
|  | syn match ptcapEscapedChar  "\\\o\{3}" contained | ||
|  | 
 | ||
|  | " A backslash at the end of a line will suppress the newline | ||
|  | syn match ptcapLineCont	    "\\$" contained | ||
|  | 
 | ||
|  | " A number follows the same rules as an integer in C | ||
|  | syn match ptcapNumber	    "#\(+\|-\)\=\d\+"lc=1 contained | ||
|  | syn match ptcapNumberError  "#\d*[^[:digit:]:\\]"lc=1 contained | ||
|  | syn match ptcapNumber	    "#0x\x\{1,8}"lc=1 contained | ||
|  | syn match ptcapNumberError  "#0x\X"me=e-1,lc=1 contained | ||
|  | syn match ptcapNumberError  "#0x\x\{9}"lc=1 contained | ||
|  | syn match ptcapNumberError  "#0x\x*[^[:xdigit:]:\\]"lc=1 contained | ||
|  | 
 | ||
|  | " The `@' operator clears a flag (i.e., sets it to zero) | ||
|  | " The `#' operator assigns a following number to the flag | ||
|  | " The `=' operator assigns a string to the preceding flag | ||
|  | syn match ptcapOperator	    "[@#=]" contained | ||
|  | 
 | ||
|  | " Some terminal capabilites have special names like `#5' and `@1', and we | ||
|  | " need special rules to match these properly | ||
|  | syn match ptcapSpecialCap   "\W[#@]\d" contains=ptcapDelimiter contained | ||
|  | 
 | ||
|  | " If editing a termcap file, an entry in the database is terminated by | ||
|  | " a (non-escaped) newline.  Otherwise, it is terminated by a line which | ||
|  | " does not start with a colon (:) | ||
|  | if exists("b:ptcap_type") && b:ptcap_type[0] == 't' | ||
|  |     syn region ptcapEntry   start="^\s*[^[:space:]:]" end="[^\\]\(\\\\\)*$" end="^$" contains=ptcapNames,ptcapField,ptcapLeadBlank keepend | ||
|  | else | ||
|  |     syn region ptcapEntry   start="^\s*[^[:space:]:]"me=e-1 end="^\s*[^[:space:]:#]"me=e-1 contains=ptcapNames,ptcapField,ptcapLeadBlank,ptcapComment | ||
|  | endif | ||
|  | syn region ptcapNames	    start="^\s*[^[:space:]:]" skip="[^\\]\(\\\\\)*\\:" end=":"me=e-1 contains=ptcapDelimiter,ptcapEscapedChar,ptcapLineCont,ptcapLeadBlank,ptcapComment keepend contained | ||
|  | syn region ptcapField	    start=":" skip="[^\\]\(\\\\\)*\\$" end="[^\\]\(\\\\\)*:"me=e-1 end="$" contains=ptcapDelimiter,ptcapString,ptcapNumber,ptcapNumberError,ptcapOperator,ptcapLineCont,ptcapSpecialCap,ptcapLeadBlank,ptcapComment keepend contained | ||
|  | syn region ptcapString	    matchgroup=ptcapOperator start="=" skip="[^\\]\(\\\\\)*\\:" matchgroup=ptcapDelimiter end=":"me=e-1 matchgroup=NONE end="[^\\]\(\\\\\)*[^\\]$" end="^$" contains=ptcapEscapedChar,ptcapLineCont keepend contained | ||
|  | syn region ptcapComment	    start="^\s*#" end="$" contains=ptcapLeadBlank | ||
|  | 
 | ||
|  | if version >= 508 || !exists("did_ptcap_syntax_inits") | ||
|  |     if version < 508 | ||
|  | 	let did_ptcap_syntax_inits = 1 | ||
|  | 	command -nargs=+ HiLink hi link <args> | ||
|  |     else | ||
|  | 	command -nargs=+ HiLink hi def link <args> | ||
|  |     endif | ||
|  | 
 | ||
|  |     HiLink ptcapComment		Comment | ||
|  |     HiLink ptcapDelimiter	Delimiter | ||
|  |     " The highlighting of "ptcapEntry" should always be overridden by | ||
|  |     " its contents, so I use Todo highlighting to indicate that there | ||
|  |     " is work to be done with the syntax file if you can see it :-) | ||
|  |     HiLink ptcapEntry		Todo | ||
|  |     HiLink ptcapError		Error | ||
|  |     HiLink ptcapEscapedChar	SpecialChar | ||
|  |     HiLink ptcapField		Type | ||
|  |     HiLink ptcapLeadBlank	NONE | ||
|  |     HiLink ptcapLineCont	Special | ||
|  |     HiLink ptcapNames		Label | ||
|  |     HiLink ptcapNumber		NONE | ||
|  |     HiLink ptcapNumberError	Error | ||
|  |     HiLink ptcapOperator	Operator | ||
|  |     HiLink ptcapSpecialCap	Type | ||
|  |     HiLink ptcapString		NONE | ||
|  | 
 | ||
|  |     delcommand HiLink | ||
|  | endif | ||
|  | 
 | ||
|  | let b:current_syntax = "ptcap" | ||
|  | 
 | ||
|  | " vim: sts=4 sw=4 ts=8 |