blob: f80a5822260d6bc65c827ed269562074833f2816 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: awk, nawk, gawk, mawk
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +01003" Maintainer: Antonio Colombo <azc100@gmail.com>
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +02004" Last Change: 2012 May 18
Bram Moolenaar071d4272004-06-13 20:20:40 +00005
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
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +010028let s:cpo_save = &cpo
29set cpo&vim
30
Bram Moolenaar071d4272004-06-13 20:20:40 +000031" 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
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +020093syn region awkString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell,awkSpecialCharacter,awkSpecialPrintf
Bram Moolenaar071d4272004-06-13 20:20:40 +000094syn 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
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200135" keywords always have precedence over match & region.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136" 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
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200144syn match awkComment "#.*" contains=@Spell,awkTodo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145
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
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200161" For version 5.8 and later: only when an item doesn't have highlighting yet
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162if 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
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100219let &cpo = s:cpo_save
220unlet s:cpo_save
221
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222" vim: ts=8