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