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