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