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