blob: 976dca26f9d0c47a0fcee5d01615bd690fffff22 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: SAS
3" Maintainer: James Kidd <james.kidd@covance.com>
Bram Moolenaare37d50a2008-08-06 17:06:04 +00004" Last Change: 18 Jul 2008 by Paulo Tanimoto <ptanimoto@gmail.com>
5" Fixed comments with * taking multiple lines.
6" Fixed highlighting of macro keywords.
7" Added words to cases that didn't fit anywhere.
8" 02 Jun 2003
Bram Moolenaar071d4272004-06-13 20:20:40 +00009" Added highlighting for additional keywords and such;
10" Attempted to match SAS default syntax colors;
11" Changed syncing so it doesn't lose colors on large blocks;
12" Much thanks to Bob Heckel for knowledgeable tweaking.
13" For version 5.x: Clear all syntax items
14" For version 6.x: Quit when a syntax file was already loaded
15if version < 600
16 syntax clear
17elseif exists("b:current_syntax")
18 finish
19endif
20
21syn case ignore
22
23syn region sasString start=+"+ skip=+\\\\\|\\"+ end=+"+
24syn region sasString start=+'+ skip=+\\\\\|\\"+ end=+'+
25
26" Want region from 'cards;' to ';' to be captured (Bob Heckel)
27syn region sasCards start="^\s*CARDS.*" end="^\s*;\s*$"
28syn region sasCards start="^\s*DATALINES.*" end="^\s*;\s*$"
29
30syn match sasNumber "-\=\<\d*\.\=[0-9_]\>"
31
Bram Moolenaare37d50a2008-08-06 17:06:04 +000032" Block comment
Bram Moolenaar071d4272004-06-13 20:20:40 +000033syn region sasComment start="/\*" end="\*/" contains=sasTodo
Bram Moolenaare37d50a2008-08-06 17:06:04 +000034
Bram Moolenaar071d4272004-06-13 20:20:40 +000035" Ignore misleading //JCL SYNTAX... (Bob Heckel)
36syn region sasComment start="[^/][^/]/\*" end="\*/" contains=sasTodo
37
Bram Moolenaare37d50a2008-08-06 17:06:04 +000038" Previous code for comments was written by Bob Heckel
39" Comments with * may take multiple lines (Paulo Tanimoto)
40syn region sasComment start=";\s*\*"hs=s+1 end=";" contains=sasTodo
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
Bram Moolenaare37d50a2008-08-06 17:06:04 +000042" Comments with * starting after a semicolon (Paulo Tanimoto)
43syn region sasComment start="^\s*\*" end=";" contains=sasTodo
Bram Moolenaar071d4272004-06-13 20:20:40 +000044
45" This line defines macro variables in code. HiLink at end of file
46" defines the color scheme. Begin region with ampersand and end with
47" any non-word character offset by -1; put ampersand in the skip list
48" just in case it is used to concatenate macro variable values.
49
50" Thanks to ronald höllwarth for this fix to an intra-versioning
51" problem with this little feature
52
53if version < 600
54 syn region sasMacroVar start="\&" skip="[_&]" end="\W"he=e-1
55else " for the older Vim's just do it their way ...
56 syn region sasMacroVar start="&" skip="[_&]" end="\W"he=e-1
57endif
58
59
60" I dont think specific PROCs need to be listed if use this line (Bob Heckel).
61syn match sasProc "^\s*PROC \w\+"
62syn keyword sasStep RUN QUIT DATA
63
64
65" Base SAS Procs - version 8.1
66
67syn keyword sasConditional DO ELSE END IF THEN UNTIL WHILE
68
69syn keyword sasStatement ABORT ARRAY ATTRIB BY CALL CARDS CARDS4 CATNAME
70syn keyword sasStatement CONTINUE DATALINES DATALINES4 DELETE DISPLAY
71syn keyword sasStatement DM DROP ENDSAS ERROR FILE FILENAME FOOTNOTE
72syn keyword sasStatement FORMAT GOTO INFILE INFORMAT INPUT KEEP
73syn keyword sasStatement LABEL LEAVE LENGTH LIBNAME LINK LIST LOSTCARD
74syn keyword sasStatement MERGE MISSING MODIFY OPTIONS OUTPUT PAGE
75syn keyword sasStatement PUT REDIRECT REMOVE RENAME REPLACE RETAIN
76syn keyword sasStatement RETURN SELECT SET SKIP STARTSAS STOP TITLE
77syn keyword sasStatement UPDATE WAITSAS WHERE WINDOW X SYSTASK
78
79" Keywords that are used in Proc SQL
80" I left them as statements because SAS's enhanced editor highlights
81" them the same as normal statements used in data steps (Jim Kidd)
82
83syn keyword sasStatement ADD AND ALTER AS CASCADE CHECK CREATE
84syn keyword sasStatement DELETE DESCRIBE DISTINCT DROP FOREIGN
85syn keyword sasStatement FROM GROUP HAVING INDEX INSERT INTO IN
86syn keyword sasStatement KEY LIKE MESSAGE MODIFY MSGTYPE NOT
87syn keyword sasStatement NULL ON OR ORDER PRIMARY REFERENCES
88syn keyword sasStatement RESET RESTRICT SELECT SET TABLE
89syn keyword sasStatement UNIQUE UPDATE VALIDATE VIEW WHERE
90
Bram Moolenaare37d50a2008-08-06 17:06:04 +000091" Match declarations have to appear one per line (Paulo Tanimoto)
92syn match sasStatement "FOOTNOTE\d"
93syn match sasStatement "TITLE\d"
Bram Moolenaar071d4272004-06-13 20:20:40 +000094
Bram Moolenaare37d50a2008-08-06 17:06:04 +000095" Match declarations have to appear one per line (Paulo Tanimoto)
96syn match sasMacro "%BQUOTE"
97syn match sasMacro "%NRBQUOTE"
98syn match sasMacro "%CMPRES"
99syn match sasMacro "%QCMPRES"
100syn match sasMacro "%COMPSTOR"
101syn match sasMacro "%DATATYP"
102syn match sasMacro "%DISPLAY"
103syn match sasMacro "%DO"
104syn match sasMacro "%ELSE"
105syn match sasMacro "%END"
106syn match sasMacro "%EVAL"
107syn match sasMacro "%GLOBAL"
108syn match sasMacro "%GOTO"
109syn match sasMacro "%IF"
110syn match sasMacro "%INDEX"
111syn match sasMacro "%INPUT"
112syn match sasMacro "%KEYDEF"
113syn match sasMacro "%LABEL"
114syn match sasMacro "%LEFT"
115syn match sasMacro "%LENGTH"
116syn match sasMacro "%LET"
117syn match sasMacro "%LOCAL"
118syn match sasMacro "%LOWCASE"
119syn match sasMacro "%MACRO"
120syn match sasMacro "%MEND"
121syn match sasMacro "%NRBQUOTE"
122syn match sasMacro "%NRQUOTE"
123syn match sasMacro "%NRSTR"
124syn match sasMacro "%PUT"
125syn match sasMacro "%QCMPRES"
126syn match sasMacro "%QLEFT"
127syn match sasMacro "%QLOWCASE"
128syn match sasMacro "%QSCAN"
129syn match sasMacro "%QSUBSTR"
130syn match sasMacro "%QSYSFUNC"
131syn match sasMacro "%QTRIM"
132syn match sasMacro "%QUOTE"
133syn match sasMacro "%QUPCASE"
134syn match sasMacro "%SCAN"
135syn match sasMacro "%STR"
136syn match sasMacro "%SUBSTR"
137syn match sasMacro "%SUPERQ"
138syn match sasMacro "%SYSCALL"
139syn match sasMacro "%SYSEVALF"
140syn match sasMacro "%SYSEXEC"
141syn match sasMacro "%SYSFUNC"
142syn match sasMacro "%SYSGET"
143syn match sasMacro "%SYSLPUT"
144syn match sasMacro "%SYSPROD"
145syn match sasMacro "%SYSRC"
146syn match sasMacro "%SYSRPUT"
147syn match sasMacro "%THEN"
148syn match sasMacro "%TO"
149syn match sasMacro "%TRIM"
150syn match sasMacro "%UNQUOTE"
151syn match sasMacro "%UNTIL"
152syn match sasMacro "%UPCASE"
153syn match sasMacro "%VERIFY"
154syn match sasMacro "%WHILE"
155syn match sasMacro "%WINDOW"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156
157" SAS Functions
158
159syn keyword sasFunction ABS ADDR AIRY ARCOS ARSIN ATAN ATTRC ATTRN
160syn keyword sasFunction BAND BETAINV BLSHIFT BNOT BOR BRSHIFT BXOR
161syn keyword sasFunction BYTE CDF CEIL CEXIST CINV CLOSE CNONCT COLLATE
162syn keyword sasFunction COMPBL COMPOUND COMPRESS COS COSH CSS CUROBS
163syn keyword sasFunction CV DACCDB DACCDBSL DACCSL DACCSYD DACCTAB
164syn keyword sasFunction DAIRY DATE DATEJUL DATEPART DATETIME DAY
165syn keyword sasFunction DCLOSE DEPDB DEPDBSL DEPDBSL DEPSL DEPSL
166syn keyword sasFunction DEPSYD DEPSYD DEPTAB DEPTAB DEQUOTE DHMS
167syn keyword sasFunction DIF DIGAMMA DIM DINFO DNUM DOPEN DOPTNAME
168syn keyword sasFunction DOPTNUM DREAD DROPNOTE DSNAME ERF ERFC EXIST
169syn keyword sasFunction EXP FAPPEND FCLOSE FCOL FDELETE FETCH FETCHOBS
170syn keyword sasFunction FEXIST FGET FILEEXIST FILENAME FILEREF FINFO
171syn keyword sasFunction FINV FIPNAME FIPNAMEL FIPSTATE FLOOR FNONCT
172syn keyword sasFunction FNOTE FOPEN FOPTNAME FOPTNUM FPOINT FPOS
173syn keyword sasFunction FPUT FREAD FREWIND FRLEN FSEP FUZZ FWRITE
174syn keyword sasFunction GAMINV GAMMA GETOPTION GETVARC GETVARN HBOUND
175syn keyword sasFunction HMS HOSTHELP HOUR IBESSEL INDEX INDEXC
176syn keyword sasFunction INDEXW INPUT INPUTC INPUTN INT INTCK INTNX
177syn keyword sasFunction INTRR IRR JBESSEL JULDATE KURTOSIS LAG LBOUND
178syn keyword sasFunction LEFT LENGTH LGAMMA LIBNAME LIBREF LOG LOG10
179syn keyword sasFunction LOG2 LOGPDF LOGPMF LOGSDF LOWCASE MAX MDY
180syn keyword sasFunction MEAN MIN MINUTE MOD MONTH MOPEN MORT N
181syn keyword sasFunction NETPV NMISS NORMAL NOTE NPV OPEN ORDINAL
182syn keyword sasFunction PATHNAME PDF PEEK PEEKC PMF POINT POISSON POKE
183syn keyword sasFunction PROBBETA PROBBNML PROBCHI PROBF PROBGAM
184syn keyword sasFunction PROBHYPR PROBIT PROBNEGB PROBNORM PROBT PUT
185syn keyword sasFunction PUTC PUTN QTR QUOTE RANBIN RANCAU RANEXP
186syn keyword sasFunction RANGAM RANGE RANK RANNOR RANPOI RANTBL RANTRI
187syn keyword sasFunction RANUNI REPEAT RESOLVE REVERSE REWIND RIGHT
188syn keyword sasFunction ROUND SAVING SCAN SDF SECOND SIGN SIN SINH
189syn keyword sasFunction SKEWNESS SOUNDEX SPEDIS SQRT STD STDERR STFIPS
190syn keyword sasFunction STNAME STNAMEL SUBSTR SUM SYMGET SYSGET SYSMSG
191syn keyword sasFunction SYSPROD SYSRC SYSTEM TAN TANH TIME TIMEPART
192syn keyword sasFunction TINV TNONCT TODAY TRANSLATE TRANWRD TRIGAMMA
193syn keyword sasFunction TRIM TRIMN TRUNC UNIFORM UPCASE USS VAR
194syn keyword sasFunction VARFMT VARINFMT VARLABEL VARLEN VARNAME
195syn keyword sasFunction VARNUM VARRAY VARRAYX VARTYPE VERIFY VFORMAT
196syn keyword sasFunction VFORMATD VFORMATDX VFORMATN VFORMATNX VFORMATW
197syn keyword sasFunction VFORMATWX VFORMATX VINARRAY VINARRAYX VINFORMAT
198syn keyword sasFunction VINFORMATD VINFORMATDX VINFORMATN VINFORMATNX
199syn keyword sasFunction VINFORMATW VINFORMATWX VINFORMATX VLABEL
200syn keyword sasFunction VLABELX VLENGTH VLENGTHX VNAME VNAMEX VTYPE
201syn keyword sasFunction VTYPEX WEEKDAY YEAR YYQ ZIPFIPS ZIPNAME ZIPNAMEL
202syn keyword sasFunction ZIPSTATE
203
204" Handy settings for using vim with log files
205syn keyword sasLogMsg NOTE
206syn keyword sasWarnMsg WARNING
207syn keyword sasErrMsg ERROR
208
209" Always contained in a comment (Bob Heckel)
210syn keyword sasTodo TODO TBD FIXME contained
211
212" These don't fit anywhere else (Bob Heckel).
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000213" Added others that were missing.
214syn match sasUnderscore "_ALL_"
215syn match sasUnderscore "_AUTOMATIC_"
216syn match sasUnderscore "_CHARACTER_"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217syn match sasUnderscore "_INFILE_"
218syn match sasUnderscore "_N_"
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000219syn match sasUnderscore "_NAME_"
220syn match sasUnderscore "_NULL_"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221syn match sasUnderscore "_NUMERIC_"
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000222syn match sasUnderscore "_USER_"
223syn match sasUnderscore "_WEBOUT_"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000224
225" End of SAS Functions
226
227" Define the default highlighting.
228" For version 5.7 and earlier: only when not done already
229" For version 5.8 and later: only when an item doesn't have highlighting yet
230
231if version >= 508 || !exists("did_sas_syntax_inits")
232 if version < 508
233 let did_sas_syntax_inits = 1
234 command -nargs=+ HiLink hi link <args>
235 else
236 command -nargs=+ HiLink hi def link <args>
237 endif
238
239 " Default sas enhanced editor color syntax
240 hi sComment term=bold cterm=NONE ctermfg=Green ctermbg=Black gui=NONE guifg=DarkGreen guibg=White
241 hi sCard term=bold cterm=NONE ctermfg=Black ctermbg=Yellow gui=NONE guifg=Black guibg=LightYellow
242 hi sDate_Time term=NONE cterm=bold ctermfg=Green ctermbg=Black gui=bold guifg=SeaGreen guibg=White
243 hi sKeyword term=NONE cterm=NONE ctermfg=Blue ctermbg=Black gui=NONE guifg=Blue guibg=White
244 hi sFmtInfmt term=NONE cterm=NONE ctermfg=LightGreen ctermbg=Black gui=NONE guifg=SeaGreen guibg=White
245 hi sString term=NONE cterm=NONE ctermfg=Magenta ctermbg=Black gui=NONE guifg=Purple guibg=White
246 hi sText term=NONE cterm=NONE ctermfg=White ctermbg=Black gui=bold guifg=Black guibg=White
247 hi sNumber term=NONE cterm=bold ctermfg=Green ctermbg=Black gui=bold guifg=SeaGreen guibg=White
248 hi sProc term=NONE cterm=bold ctermfg=Blue ctermbg=Black gui=bold guifg=Navy guibg=White
249 hi sSection term=NONE cterm=bold ctermfg=Blue ctermbg=Black gui=bold guifg=Navy guibg=White
250 hi mDefine term=NONE cterm=bold ctermfg=White ctermbg=Black gui=bold guifg=Black guibg=White
251 hi mKeyword term=NONE cterm=NONE ctermfg=Blue ctermbg=Black gui=NONE guifg=Blue guibg=White
252 hi mReference term=NONE cterm=bold ctermfg=White ctermbg=Black gui=bold guifg=Blue guibg=White
253 hi mSection term=NONE cterm=NONE ctermfg=Blue ctermbg=Black gui=bold guifg=Navy guibg=White
254 hi mText term=NONE cterm=NONE ctermfg=White ctermbg=Black gui=bold guifg=Black guibg=White
255
256" Colors that closely match SAS log colors for default color scheme
257 hi lError term=NONE cterm=NONE ctermfg=Red ctermbg=Black gui=none guifg=Red guibg=White
258 hi lWarning term=NONE cterm=NONE ctermfg=Green ctermbg=Black gui=none guifg=Green guibg=White
259 hi lNote term=NONE cterm=NONE ctermfg=Cyan ctermbg=Black gui=none guifg=Blue guibg=White
260
261
262 " Special hilighting for the SAS proc section
263
264 HiLink sasComment sComment
265 HiLink sasConditional sKeyword
266 HiLink sasStep sSection
267 HiLink sasFunction sKeyword
268 HiLink sasMacro mKeyword
269 HiLink sasMacroVar NonText
270 HiLink sasNumber sNumber
271 HiLink sasStatement sKeyword
272 HiLink sasString sString
273 HiLink sasProc sProc
274 " (Bob Heckel)
275 HiLink sasTodo Todo
276 HiLink sasErrMsg lError
277 HiLink sasWarnMsg lWarning
278 HiLink sasLogMsg lNote
279 HiLink sasCards sCard
280 " (Bob Heckel)
281 HiLink sasUnderscore PreProc
282 delcommand HiLink
283endif
284
285" Syncronize from beginning to keep large blocks from losing
286" syntax coloring while moving through code.
287syn sync fromstart
288
289let b:current_syntax = "sas"
290
291" vim: ts=8