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