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