xref: /vim-8.2.3635/runtime/syntax/ptcap.vim (revision f37506f6)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	printcap/termcap database
3071d4279SBram Moolenaar" Maintainer:	Haakon Riiser <[email protected]>
4071d4279SBram Moolenaar" URL:		http://folk.uio.no/hakonrk/vim/syntax/ptcap.vim
5071d4279SBram Moolenaar" Last Change:	2001 May 15
6071d4279SBram Moolenaar
789bcfda6SBram Moolenaar" quit when a syntax file was already loaded
889bcfda6SBram Moolenaarif exists("b:current_syntax")
9071d4279SBram Moolenaar    finish
10071d4279SBram Moolenaarendif
11071d4279SBram Moolenaar
12071d4279SBram Moolenaar" Since I only highlight based on the structure of the databases, not
13071d4279SBram Moolenaar" specific keywords, case sensitivity isn't required
14071d4279SBram Moolenaarsyn case ignore
15071d4279SBram Moolenaar
16071d4279SBram Moolenaar" Since everything that is not caught by the syntax patterns is assumed
17071d4279SBram Moolenaar" to be an error, we start parsing 20 lines up, unless something else
18071d4279SBram Moolenaar" is specified
19071d4279SBram Moolenaarif exists("ptcap_minlines")
20071d4279SBram Moolenaar    exe "syn sync lines=".ptcap_minlines
21071d4279SBram Moolenaarelse
22071d4279SBram Moolenaar    syn sync lines=20
23071d4279SBram Moolenaarendif
24071d4279SBram Moolenaar
25071d4279SBram Moolenaar" Highlight everything that isn't caught by the rules as errors,
26071d4279SBram Moolenaar" except blank lines
27071d4279SBram Moolenaarsyn match ptcapError	    "^.*\S.*$"
28071d4279SBram Moolenaar
29071d4279SBram Moolenaarsyn match ptcapLeadBlank    "^\s\+" contained
30071d4279SBram Moolenaar
31071d4279SBram Moolenaar" `:' and `|' are delimiters for fields and names, and should not be
32071d4279SBram Moolenaar" highlighted.	Hence, they are linked to `NONE'
33071d4279SBram Moolenaarsyn match ptcapDelimiter    "[:|]" contained
34071d4279SBram Moolenaar
35071d4279SBram Moolenaar" Escaped characters receive special highlighting
36071d4279SBram Moolenaarsyn match ptcapEscapedChar  "\\." contained
37071d4279SBram Moolenaarsyn match ptcapEscapedChar  "\^." contained
38071d4279SBram Moolenaarsyn match ptcapEscapedChar  "\\\o\{3}" contained
39071d4279SBram Moolenaar
40071d4279SBram Moolenaar" A backslash at the end of a line will suppress the newline
41071d4279SBram Moolenaarsyn match ptcapLineCont	    "\\$" contained
42071d4279SBram Moolenaar
43071d4279SBram Moolenaar" A number follows the same rules as an integer in C
44071d4279SBram Moolenaarsyn match ptcapNumber	    "#\(+\|-\)\=\d\+"lc=1 contained
45071d4279SBram Moolenaarsyn match ptcapNumberError  "#\d*[^[:digit:]:\\]"lc=1 contained
46071d4279SBram Moolenaarsyn match ptcapNumber	    "#0x\x\{1,8}"lc=1 contained
47071d4279SBram Moolenaarsyn match ptcapNumberError  "#0x\X"me=e-1,lc=1 contained
48071d4279SBram Moolenaarsyn match ptcapNumberError  "#0x\x\{9}"lc=1 contained
49071d4279SBram Moolenaarsyn match ptcapNumberError  "#0x\x*[^[:xdigit:]:\\]"lc=1 contained
50071d4279SBram Moolenaar
51071d4279SBram Moolenaar" The `@' operator clears a flag (i.e., sets it to zero)
52071d4279SBram Moolenaar" The `#' operator assigns a following number to the flag
53071d4279SBram Moolenaar" The `=' operator assigns a string to the preceding flag
54071d4279SBram Moolenaarsyn match ptcapOperator	    "[@#=]" contained
55071d4279SBram Moolenaar
56071d4279SBram Moolenaar" Some terminal capabilites have special names like `#5' and `@1', and we
57071d4279SBram Moolenaar" need special rules to match these properly
58071d4279SBram Moolenaarsyn match ptcapSpecialCap   "\W[#@]\d" contains=ptcapDelimiter contained
59071d4279SBram Moolenaar
60071d4279SBram Moolenaar" If editing a termcap file, an entry in the database is terminated by
61071d4279SBram Moolenaar" a (non-escaped) newline.  Otherwise, it is terminated by a line which
62071d4279SBram Moolenaar" does not start with a colon (:)
63071d4279SBram Moolenaarif exists("b:ptcap_type") && b:ptcap_type[0] == 't'
64071d4279SBram Moolenaar    syn region ptcapEntry   start="^\s*[^[:space:]:]" end="[^\\]\(\\\\\)*$" end="^$" contains=ptcapNames,ptcapField,ptcapLeadBlank keepend
65071d4279SBram Moolenaarelse
66071d4279SBram Moolenaar    syn region ptcapEntry   start="^\s*[^[:space:]:]"me=e-1 end="^\s*[^[:space:]:#]"me=e-1 contains=ptcapNames,ptcapField,ptcapLeadBlank,ptcapComment
67071d4279SBram Moolenaarendif
68071d4279SBram Moolenaarsyn region ptcapNames	    start="^\s*[^[:space:]:]" skip="[^\\]\(\\\\\)*\\:" end=":"me=e-1 contains=ptcapDelimiter,ptcapEscapedChar,ptcapLineCont,ptcapLeadBlank,ptcapComment keepend contained
69071d4279SBram Moolenaarsyn region ptcapField	    start=":" skip="[^\\]\(\\\\\)*\\$" end="[^\\]\(\\\\\)*:"me=e-1 end="$" contains=ptcapDelimiter,ptcapString,ptcapNumber,ptcapNumberError,ptcapOperator,ptcapLineCont,ptcapSpecialCap,ptcapLeadBlank,ptcapComment keepend contained
70071d4279SBram Moolenaarsyn region ptcapString	    matchgroup=ptcapOperator start="=" skip="[^\\]\(\\\\\)*\\:" matchgroup=ptcapDelimiter end=":"me=e-1 matchgroup=NONE end="[^\\]\(\\\\\)*[^\\]$" end="^$" contains=ptcapEscapedChar,ptcapLineCont keepend contained
71071d4279SBram Moolenaarsyn region ptcapComment	    start="^\s*#" end="$" contains=ptcapLeadBlank
72071d4279SBram Moolenaar
73071d4279SBram Moolenaar
74*f37506f6SBram Moolenaarhi def link ptcapComment		Comment
75*f37506f6SBram Moolenaarhi def link ptcapDelimiter	Delimiter
76071d4279SBram Moolenaar" The highlighting of "ptcapEntry" should always be overridden by
77071d4279SBram Moolenaar" its contents, so I use Todo highlighting to indicate that there
78071d4279SBram Moolenaar" is work to be done with the syntax file if you can see it :-)
79*f37506f6SBram Moolenaarhi def link ptcapEntry		Todo
80*f37506f6SBram Moolenaarhi def link ptcapError		Error
81*f37506f6SBram Moolenaarhi def link ptcapEscapedChar	SpecialChar
82*f37506f6SBram Moolenaarhi def link ptcapField		Type
83*f37506f6SBram Moolenaarhi def link ptcapLeadBlank	NONE
84*f37506f6SBram Moolenaarhi def link ptcapLineCont	Special
85*f37506f6SBram Moolenaarhi def link ptcapNames		Label
86*f37506f6SBram Moolenaarhi def link ptcapNumber		NONE
87*f37506f6SBram Moolenaarhi def link ptcapNumberError	Error
88*f37506f6SBram Moolenaarhi def link ptcapOperator	Operator
89*f37506f6SBram Moolenaarhi def link ptcapSpecialCap	Type
90*f37506f6SBram Moolenaarhi def link ptcapString		NONE
91071d4279SBram Moolenaar
92071d4279SBram Moolenaar
93071d4279SBram Moolenaarlet b:current_syntax = "ptcap"
94071d4279SBram Moolenaar
95071d4279SBram Moolenaar" vim: sts=4 sw=4 ts=8
96