Merged from the latest developing branch.
[MacVim.git] / runtime / syntax / sas.vim
blob68e8788e26daa6f43914ba5b0f15fe1a088b1929
1 " Vim syntax file
2 " Language:     SAS
3 " Maintainer:   James Kidd <james.kidd@covance.com>
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
11 if version < 600
12    syntax clear
13 elseif exists("b:current_syntax")
14    finish
15 endif
17 syn case ignore
19 syn region sasString    start=+"+  skip=+\\\\\|\\"+  end=+"+
20 syn region sasString    start=+'+  skip=+\\\\\|\\"+  end=+'+
22 " Want region from 'cards;' to ';' to be captured (Bob Heckel)
23 syn region sasCards     start="^\s*CARDS.*" end="^\s*;\s*$"
24 syn region sasCards     start="^\s*DATALINES.*" end="^\s*;\s*$"
26 syn match sasNumber     "-\=\<\d*\.\=[0-9_]\>"
28 syn region sasComment   start="/\*"  end="\*/" contains=sasTodo
29 " Ignore misleading //JCL SYNTAX... (Bob Heckel)
30 syn region sasComment   start="[^/][^/]/\*"  end="\*/" contains=sasTodo
32 " Allow highlighting of embedded TODOs (Bob Heckel)
33 syn match sasComment    "^\s*\*.*;" contains=sasTodo
35 " Allow highlighting of embedded TODOs (Bob Heckel)
36 syn match sasComment    ";\s*\*.*;"hs=s+1 contains=sasTodo
38 " Handle macro comments too (Bob Heckel).
39 syn match sasComment    "^\s*%*\*.*;" contains=sasTodo
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.
46 " Thanks to ronald höllwarth for this fix to an intra-versioning
47 " problem with this little feature
49 if version < 600
50    syn region sasMacroVar       start="\&" skip="[_&]" end="\W"he=e-1
51 else             " for the older Vim's just do it their way ...
52    syn region sasMacroVar       start="&" skip="[_&]" end="\W"he=e-1
53 endif
56 " I dont think specific PROCs need to be listed if use this line (Bob Heckel).
57 syn match sasProc               "^\s*PROC \w\+"
58 syn keyword sasStep             RUN QUIT DATA
61 " Base SAS Procs - version 8.1
63 syn keyword sasConditional      DO ELSE END IF THEN UNTIL WHILE
65 syn keyword sasStatement        ABORT ARRAY ATTRIB BY CALL CARDS CARDS4 CATNAME
66 syn keyword sasStatement        CONTINUE DATALINES DATALINES4 DELETE DISPLAY
67 syn keyword sasStatement        DM DROP ENDSAS ERROR FILE FILENAME FOOTNOTE
68 syn keyword sasStatement        FORMAT GOTO INFILE INFORMAT INPUT KEEP
69 syn keyword sasStatement        LABEL LEAVE LENGTH LIBNAME LINK LIST LOSTCARD
70 syn keyword sasStatement        MERGE MISSING MODIFY OPTIONS OUTPUT PAGE
71 syn keyword sasStatement        PUT REDIRECT REMOVE RENAME REPLACE RETAIN
72 syn keyword sasStatement        RETURN SELECT SET SKIP STARTSAS STOP TITLE
73 syn keyword sasStatement        UPDATE WAITSAS WHERE WINDOW X SYSTASK
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)
79 syn keyword sasStatement        ADD AND ALTER AS CASCADE CHECK CREATE
80 syn keyword sasStatement        DELETE DESCRIBE DISTINCT DROP FOREIGN
81 syn keyword sasStatement        FROM GROUP HAVING INDEX INSERT INTO IN
82 syn keyword sasStatement        KEY LIKE MESSAGE MODIFY MSGTYPE NOT
83 syn keyword sasStatement        NULL ON OR ORDER PRIMARY REFERENCES
84 syn keyword sasStatement        RESET RESTRICT SELECT SET TABLE
85 syn keyword sasStatement        UNIQUE UPDATE VALIDATE VIEW WHERE
88 syn match sasStatement  "FOOTNOTE\d" "TITLE\d"
90 syn match sasMacro      "%BQUOTE" "%NRBQUOTE" "%CMPRES" "%QCMPRES"
91 syn match sasMacro      "%COMPSTOR" "%DATATYP" "%DISPLAY" "%DO"
92 syn match sasMacro      "%ELSE" "%END" "%EVAL" "%GLOBAL"
93 syn match sasMacro      "%GOTO" "%IF" "%INDEX" "%INPUT"
94 syn match sasMacro      "%KEYDEF" "%LABEL" "%LEFT" "%LENGTH"
95 syn match sasMacro      "%LET" "%LOCAL" "%LOWCASE" "%MACRO"
96 syn match sasMacro      "%MEND" "%NRBQUOTE" "%NRQUOTE" "%NRSTR"
97 syn match sasMacro      "%PUT" "%QCMPRES" "%QLEFT" "%QLOWCASE"
98 syn match sasMacro      "%QSCAN" "%QSUBSTR" "%QSYSFUNC" "%QTRIM"
99 syn match sasMacro      "%QUOTE" "%QUPCASE" "%SCAN" "%STR"
100 syn match sasMacro      "%SUBSTR" "%SUPERQ" "%SYSCALL" "%SYSEVALF"
101 syn match sasMacro      "%SYSEXEC" "%SYSFUNC" "%SYSGET" "%SYSLPUT"
102 syn match sasMacro      "%SYSPROD" "%SYSRC" "%SYSRPUT" "%THEN"
103 syn match sasMacro      "%TO" "%TRIM" "%UNQUOTE" "%UNTIL"
104 syn match sasMacro      "%UPCASE" "%VERIFY" "%WHILE" "%WINDOW"
106 " SAS Functions
108 syn keyword sasFunction ABS ADDR AIRY ARCOS ARSIN ATAN ATTRC ATTRN
109 syn keyword sasFunction BAND BETAINV BLSHIFT BNOT BOR BRSHIFT BXOR
110 syn keyword sasFunction BYTE CDF CEIL CEXIST CINV CLOSE CNONCT COLLATE
111 syn keyword sasFunction COMPBL COMPOUND COMPRESS COS COSH CSS CUROBS
112 syn keyword sasFunction CV DACCDB DACCDBSL DACCSL DACCSYD DACCTAB
113 syn keyword sasFunction DAIRY DATE DATEJUL DATEPART DATETIME DAY
114 syn keyword sasFunction DCLOSE DEPDB DEPDBSL DEPDBSL DEPSL DEPSL
115 syn keyword sasFunction DEPSYD DEPSYD DEPTAB DEPTAB DEQUOTE DHMS
116 syn keyword sasFunction DIF DIGAMMA DIM DINFO DNUM DOPEN DOPTNAME
117 syn keyword sasFunction DOPTNUM DREAD DROPNOTE DSNAME ERF ERFC EXIST
118 syn keyword sasFunction EXP FAPPEND FCLOSE FCOL FDELETE FETCH FETCHOBS
119 syn keyword sasFunction FEXIST FGET FILEEXIST FILENAME FILEREF FINFO
120 syn keyword sasFunction FINV FIPNAME FIPNAMEL FIPSTATE FLOOR FNONCT
121 syn keyword sasFunction FNOTE FOPEN FOPTNAME FOPTNUM FPOINT FPOS
122 syn keyword sasFunction FPUT FREAD FREWIND FRLEN FSEP FUZZ FWRITE
123 syn keyword sasFunction GAMINV GAMMA GETOPTION GETVARC GETVARN HBOUND
124 syn keyword sasFunction HMS HOSTHELP HOUR IBESSEL INDEX INDEXC
125 syn keyword sasFunction INDEXW INPUT INPUTC INPUTN INT INTCK INTNX
126 syn keyword sasFunction INTRR IRR JBESSEL JULDATE KURTOSIS LAG LBOUND
127 syn keyword sasFunction LEFT LENGTH LGAMMA LIBNAME LIBREF LOG LOG10
128 syn keyword sasFunction LOG2 LOGPDF LOGPMF LOGSDF LOWCASE MAX MDY
129 syn keyword sasFunction MEAN MIN MINUTE MOD MONTH MOPEN MORT N
130 syn keyword sasFunction NETPV NMISS NORMAL NOTE NPV OPEN ORDINAL
131 syn keyword sasFunction PATHNAME PDF PEEK PEEKC PMF POINT POISSON POKE
132 syn keyword sasFunction PROBBETA PROBBNML PROBCHI PROBF PROBGAM
133 syn keyword sasFunction PROBHYPR PROBIT PROBNEGB PROBNORM PROBT PUT
134 syn keyword sasFunction PUTC PUTN QTR QUOTE RANBIN RANCAU RANEXP
135 syn keyword sasFunction RANGAM RANGE RANK RANNOR RANPOI RANTBL RANTRI
136 syn keyword sasFunction RANUNI REPEAT RESOLVE REVERSE REWIND RIGHT
137 syn keyword sasFunction ROUND SAVING SCAN SDF SECOND SIGN SIN SINH
138 syn keyword sasFunction SKEWNESS SOUNDEX SPEDIS SQRT STD STDERR STFIPS
139 syn keyword sasFunction STNAME STNAMEL SUBSTR SUM SYMGET SYSGET SYSMSG
140 syn keyword sasFunction SYSPROD SYSRC SYSTEM TAN TANH TIME TIMEPART
141 syn keyword sasFunction TINV TNONCT TODAY TRANSLATE TRANWRD TRIGAMMA
142 syn keyword sasFunction TRIM TRIMN TRUNC UNIFORM UPCASE USS VAR
143 syn keyword sasFunction VARFMT VARINFMT VARLABEL VARLEN VARNAME
144 syn keyword sasFunction VARNUM VARRAY VARRAYX VARTYPE VERIFY VFORMAT
145 syn keyword sasFunction VFORMATD VFORMATDX VFORMATN VFORMATNX VFORMATW
146 syn keyword sasFunction VFORMATWX VFORMATX VINARRAY VINARRAYX VINFORMAT
147 syn keyword sasFunction VINFORMATD VINFORMATDX VINFORMATN VINFORMATNX
148 syn keyword sasFunction VINFORMATW VINFORMATWX VINFORMATX VLABEL
149 syn keyword sasFunction VLABELX VLENGTH VLENGTHX VNAME VNAMEX VTYPE
150 syn keyword sasFunction VTYPEX WEEKDAY YEAR YYQ ZIPFIPS ZIPNAME ZIPNAMEL
151 syn keyword sasFunction ZIPSTATE
153 " Handy settings for using vim with log files
154 syn keyword sasLogMsg   NOTE
155 syn keyword sasWarnMsg  WARNING
156 syn keyword sasErrMsg   ERROR
158 " Always contained in a comment (Bob Heckel)
159 syn keyword sasTodo     TODO TBD FIXME contained
161 " These don't fit anywhere else (Bob Heckel).
162 syn match sasUnderscore "_NULL_"
163 syn match sasUnderscore "_INFILE_"
164 syn match sasUnderscore "_N_"
165 syn match sasUnderscore "_WEBOUT_"
166 syn match sasUnderscore "_NUMERIC_"
167 syn match sasUnderscore "_CHARACTER_"
168 syn match sasUnderscore "_ALL_"
170 " End of SAS Functions
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
176 if 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
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
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
207    " Special hilighting for the SAS proc section
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
228 endif
230 " Syncronize from beginning to keep large blocks from losing
231 " syntax coloring while moving through code.
232 syn sync fromstart
234 let b:current_syntax = "sas"
236 " vim: ts=8