xref: /vim-8.2.3635/runtime/syntax/awk.vim (revision dee2e315)
1" Vim syntax file
2" Language:	awk, nawk, gawk, mawk
3" Maintainer:	Antonio Colombo <[email protected]>
4" Last Change:	2012 May 18
5
6" AWK  ref.  is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger
7" The AWK Programming Language, Addison-Wesley, 1988
8
9" GAWK ref. is: Arnold D. Robbins
10" Effective AWK Programming, Third Edition, O'Reilly, 2001
11
12" MAWK is a "new awk" meaning it implements AWK ref.
13" mawk conforms to the Posix 1003.2 (draft 11.3)
14" definition of the AWK language which contains a few features
15" not described in the AWK book, and mawk provides a small number of extensions.
16
17" TODO:
18" Dig into the commented out syntax expressions below.
19
20" For version 5.x: Clear all syntax items
21" For version 6.x: Quit when a syntax file was already loaded
22if version < 600
23  syn clear
24elseif exists("b:current_syntax")
25  finish
26endif
27
28let s:cpo_save = &cpo
29set cpo&vim
30
31" A bunch of useful Awk keywords
32" AWK  ref. p. 188
33syn keyword awkStatement	break continue delete exit
34syn keyword awkStatement	function getline next
35syn keyword awkStatement	print printf return
36" GAWK ref. p. 117
37syn keyword awkStatement	nextfile
38" AWK  ref. p. 42, GAWK ref. p. 142-166
39syn keyword awkFunction	atan2 close cos exp fflush int log rand sin sqrt srand
40syn keyword awkFunction	gsub index length match split sprintf sub
41syn keyword awkFunction	substr system
42" GAWK ref. p. 142-166
43syn keyword awkFunction	asort gensub mktime strftime strtonum systime
44syn keyword awkFunction	tolower toupper
45syn keyword awkFunction	and or xor compl lshift rshift
46syn keyword awkFunction	dcgettext bindtextdomain
47
48syn keyword awkConditional	if else
49syn keyword awkRepeat	while for
50
51syn keyword awkTodo		contained TODO
52
53syn keyword awkPatterns	BEGIN END
54" AWK  ref. p. 36
55syn keyword awkVariables	ARGC ARGV FILENAME FNR FS NF NR
56syn keyword awkVariables	OFMT OFS ORS RLENGTH RS RSTART SUBSEP
57" GAWK ref. p. 120-126
58syn keyword awkVariables	ARGIND BINMODE CONVFMT ENVIRON ERRNO
59syn keyword awkVariables	FIELDWIDTHS IGNORECASE LINT PROCINFO
60syn keyword awkVariables	RT RLENGTH TEXTDOMAIN
61
62syn keyword awkRepeat	do
63
64" Octal format character.
65syn match   awkSpecialCharacter display contained "\\[0-7]\{1,3\}"
66syn keyword awkStatement	func nextfile
67" Hex   format character.
68syn match   awkSpecialCharacter display contained "\\x[0-9A-Fa-f]\+"
69
70syn match   awkFieldVars	"\$\d\+"
71
72"catch errors caused by wrong parenthesis
73syn region	awkParen	transparent start="(" end=")" contains=ALLBUT,awkParenError,awkSpecialCharacter,awkArrayElement,awkArrayArray,awkTodo,awkRegExp,awkBrktRegExp,awkBrackets,awkCharClass
74syn match	awkParenError	display ")"
75syn match	awkInParen	display contained "[{}]"
76
77" 64 lines for complex &&'s, and ||'s in a big "if"
78syn sync ccomment awkParen maxlines=64
79
80" Search strings & Regular Expressions therein.
81syn region  awkSearch	oneline start="^[ \t]*/"ms=e start="\(,\|!\=\~\)[ \t]*/"ms=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter
82syn region  awkBrackets	contained start="\[\^\]\="ms=s+2 start="\[[^\^]"ms=s+1 end="\]"me=e-1 contains=awkBrktRegExp,awkCharClass
83syn region  awkSearch	oneline start="[ \t]*/"hs=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter
84
85syn match   awkCharClass	contained "\[:[^:\]]*:\]"
86syn match   awkBrktRegExp	contained "\\.\|.\-[^]]"
87syn match   awkRegExp	contained "/\^"ms=s+1
88syn match   awkRegExp	contained "\$/"me=e-1
89syn match   awkRegExp	contained "[?.*{}|+]"
90
91" String and Character constants
92" Highlight special characters (those which have a backslash) differently
93syn region  awkString	start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=@Spell,awkSpecialCharacter,awkSpecialPrintf
94syn match   awkSpecialCharacter contained "\\."
95
96" Some of these combinations may seem weird, but they work.
97syn match   awkSpecialPrintf	contained "%[-+ #]*\d*\.\=\d*[cdefgiosuxEGX%]"
98
99" Numbers, allowing signs (both -, and +)
100" Integer number.
101syn match  awkNumber		display "[+-]\=\<\d\+\>"
102" Floating point number.
103syn match  awkFloat		display "[+-]\=\<\d\+\.\d+\>"
104" Floating point number, starting with a dot.
105syn match  awkFloat		display "[+-]\=\<.\d+\>"
106syn case ignore
107"floating point number, with dot, optional exponent
108syn match  awkFloat	display "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\>"
109"floating point number, starting with a dot, optional exponent
110syn match  awkFloat	display "\.\d\+\(e[-+]\=\d\+\)\=\>"
111"floating point number, without dot, with exponent
112syn match  awkFloat	display "\<\d\+e[-+]\=\d\+\>"
113syn case match
114
115"syn match  awkIdentifier	"\<[a-zA-Z_][a-zA-Z0-9_]*\>"
116
117" Arithmetic operators: +, and - take care of ++, and --
118"syn match   awkOperator	"+\|-\|\*\|/\|%\|="
119"syn match   awkOperator	"+=\|-=\|\*=\|/=\|%="
120"syn match   awkOperator	"^\|^="
121
122" Comparison expressions.
123"syn match   awkExpression	"==\|>=\|=>\|<=\|=<\|\!="
124"syn match   awkExpression	"\~\|\!\~"
125"syn match   awkExpression	"?\|:"
126"syn keyword awkExpression	in
127
128" Boolean Logic (OR, AND, NOT)
129"syn match  awkBoolLogic	"||\|&&\|\!"
130
131" This is overridden by less-than & greater-than.
132" Put this above those to override them.
133" Put this in a 'match "\<printf\=\>.*;\="' to make it not override
134" less/greater than (most of the time), but it won't work yet because
135" keywords always have precedence over match & region.
136" File I/O: (print foo, bar > "filename") & for nawk (getline < "filename")
137"syn match  awkFileIO		contained ">"
138"syn match  awkFileIO		contained "<"
139
140" Expression separators: ';' and ','
141syn match  awkSemicolon	";"
142syn match  awkComma		","
143
144syn match  awkComment	"#.*" contains=@Spell,awkTodo
145
146syn match  awkLineSkip	"\\$"
147
148" Highlight array element's (recursive arrays allowed).
149" Keeps nested array names' separate from normal array elements.
150" Keeps numbers separate from normal array elements (variables).
151syn match  awkArrayArray	contained "[^][, \t]\+\["me=e-1
152syn match  awkArrayElement      contained "[^][, \t]\+"
153syn region awkArray		transparent start="\[" end="\]" contains=awkArray,awkArrayElement,awkArrayArray,awkNumber,awkFloat
154
155" 10 should be enough.
156" (for the few instances where it would be more than "oneline")
157syn sync ccomment awkArray maxlines=10
158
159" define the default highlighting
160" For version 5.7 and earlier: only when not done already
161" For version 5.8 and later: only when an item doesn't have highlighting yet
162if version >= 508 || !exists("did_awk_syn_inits")
163  if version < 508
164    let did_awk_syn_inits = 1
165    command -nargs=+ HiLink hi link <args>
166  else
167    command -nargs=+ HiLink hi def link <args>
168  endif
169
170  HiLink awkConditional		Conditional
171  HiLink awkFunction		Function
172  HiLink awkRepeat		Repeat
173  HiLink awkStatement		Statement
174
175  HiLink awkString		String
176  HiLink awkSpecialPrintf	Special
177  HiLink awkSpecialCharacter	Special
178
179  HiLink awkSearch		String
180  HiLink awkBrackets		awkRegExp
181  HiLink awkBrktRegExp		awkNestRegExp
182  HiLink awkCharClass		awkNestRegExp
183  HiLink awkNestRegExp		Keyword
184  HiLink awkRegExp		Special
185
186  HiLink awkNumber		Number
187  HiLink awkFloat		Float
188
189  HiLink awkFileIO		Special
190  "HiLink awkOperator		Special
191  "HiLink awkExpression		Special
192  HiLink awkBoolLogic		Special
193
194  HiLink awkPatterns		Special
195  HiLink awkVariables		Special
196  HiLink awkFieldVars		Special
197
198  HiLink awkLineSkip		Special
199  HiLink awkSemicolon		Special
200  HiLink awkComma		Special
201  "HiLink awkIdentifier		Identifier
202
203  HiLink awkComment		Comment
204  HiLink awkTodo		Todo
205
206  " Change this if you want nested array names to be highlighted.
207  HiLink awkArrayArray		awkArray
208  HiLink awkArrayElement	Special
209
210  HiLink awkParenError		awkError
211  HiLink awkInParen		awkError
212  HiLink awkError		Error
213
214  delcommand HiLink
215endif
216
217let b:current_syntax = "awk"
218
219let &cpo = s:cpo_save
220unlet s:cpo_save
221
222" vim: ts=8
223