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