1<?php
2/*************************************************************************************
3 * sas.php
4 * -------
5 * Author: Galen Johnson (solitaryr@gmail.com)
6 * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
7 * Release Version: 1.0.9.1
8 * Date Started: 2005/12/27
9 *
10 * SAS language file for GeSHi. Based on the sas vim file.
11 *
12 * CHANGES
13 * -------
14 * 2008/05/23 (1.0.7.22)
15 *   -  Added description of extra language features (SF#1970248)
16 *   -  Cleaned up code style
17 * 2005/12/27 (1.0.0)
18 *   -  First Release
19 *
20 * TODO (updated 2005/12/27)
21 * -------------------------
22 * * Check highlighting stuff works
23 *
24 *************************************************************************************
25 *
26 *     This file is part of GeSHi.
27 *
28 *   GeSHi is free software; you can redistribute it and/or modify
29 *   it under the terms of the GNU General Public License as published by
30 *   the Free Software Foundation; either version 2 of the License, or
31 *   (at your option) any later version.
32 *
33 *   GeSHi is distributed in the hope that it will be useful,
34 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
35 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
36 *   GNU General Public License for more details.
37 *
38 *   You should have received a copy of the GNU General Public License
39 *   along with GeSHi; if not, write to the Free Software
40 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
41 *
42 ************************************************************************************/
43
44$language_data = array (
45    'LANG_NAME' => 'SAS',
46    'COMMENT_SINGLE' => array(),
47    'COMMENT_MULTI' => array('/*' => '*/', '*' => ';'),
48    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
49    'QUOTEMARKS' => array("'", '"'),
50    'ESCAPE_CHAR' => '\\',
51    'KEYWORDS' => array(
52        1 => array(
53            '_ALL_','_CHARACTER_','_INFILE_','_N_','_NULL_','_NUMERIC_',
54            '_WEBOUT_'
55            ),
56        2 => array(
57            '%BQUOTE','%CMPRES','%COMPSTOR','%DATATYP','%DISPLAY','%DO','%ELSE',
58            '%END','%EVAL','%GLOBAL','%GOTO','%IF','%INDEX','%INPUT','%KEYDEF',
59            '%LABEL','%LEFT','%LENGTH','%LET','%LOCAL','%LOWCASE','%MACRO',
60            '%MEND','%NRBQUOTE','%NRQUOTE','%NRSTR','%PUT','%QCMPRES','%QLEFT',
61            '%QLOWCASE','%QSCAN','%QSUBSTR','%QSYSFUNC','%QTRIM','%QUOTE',
62            '%QUPCASE','%SCAN','%STR','%SUBSTR','%SUPERQ','%SYSCALL',
63            '%SYSEVALF','%SYSEXEC','%SYSFUNC','%SYSGET','%SYSLPUT','%SYSPROD',
64            '%SYSRC','%SYSRPUT','%THEN','%TO','%TRIM','%UNQUOTE','%UNTIL',
65            '%UPCASE','%VERIFY','%WHILE','%WINDOW'
66            ),
67        3 => array(
68            'ABS','ADDR','AIRY','ARCOS','ARSIN','ATAN','ATTRC','ATTRN','BAND',
69            'BETAINV','BLSHIFT','BNOT','BOR','BRSHIFT','BXOR','BYTE','CDF',
70            'CEIL','CEXIST','CINV','CLOSE','CNONCT','COLLATE','COMPBL',
71            'COMPOUND','COMPRESS','COSH','COS','CSS','CUROBS','CV','DACCDBSL',
72            'DACCDB','DACCSL','DACCSYD','DACCTAB','DAIRY','DATETIME','DATEJUL',
73            'DATEPART','DATE','DAY','DCLOSE','DEPDBSL','DEPDB','DEPSL','DEPSYD',
74            'DEPTAB','DEQUOTE','DHMS','DIF','DIGAMMA','DIM','DINFO','DNUM',
75            'DOPEN','DOPTNAME','DOPTNUM','DREAD','DROPNOTE','DSNAME','ERFC',
76            'ERF','EXIST','EXP','FAPPEND','FCLOSE','FCOL','FDELETE','FETCHOBS',
77            'FETCH','FEXIST','FGET','FILEEXIST','FILENAME','FILEREF','FINFO',
78            'FINV','FIPNAMEL','FIPNAME','FIPSTATE','FLOOR','FNONCT','FNOTE',
79            'FOPEN','FOPTNAME','FOPTNUM','FPOINT','FPOS','FPUT','FREAD',
80            'FREWIND','FRLEN','FSEP','FUZZ','FWRITE','GAMINV','GAMMA',
81            'GETOPTION','GETVARC','GETVARN','HBOUND','HMS','HOSTHELP','HOUR',
82            'IBESSEL','INDEXW','INDEXC','INDEX','INPUTN','INPUTC','INPUT',
83            'INTRR','INTCK','INTNX','INT','IRR','JBESSEL','JULDATE','KURTOSIS',
84            'LAG','LBOUND','LEFT','LENGTH','LGAMMA','LIBNAME','LIBREF','LOG10',
85            'LOG2','LOGPDF','LOGPMF','LOGSDF','LOG','LOWCASE','MAX','MDY',
86            'MEAN','MINUTE','MIN','MOD','MONTH','MOPEN','MORT','NETPV','NMISS',
87            'NORMAL','NPV','N','OPEN','ORDINAL','PATHNAME','PDF','PEEKC','PEEK',
88            'PMF','POINT','POISSON','POKE','PROBBETA','PROBBNML','PROBCHI',
89            'PROBF','PROBGAM','PROBHYPR','PROBIT','PROBNEGB','PROBNORM','PROBT',
90            'PUTN','PUTC','PUT','QTR','QUOTE','RANBIN','RANCAU','RANEXP',
91            'RANGAM','RANGE','RANK','RANNOR','RANPOI','RANTBL','RANTRI',
92            'RANUNI','REPEAT','RESOLVE','REVERSE','REWIND','RIGHT','ROUND',
93            'SAVING','SCAN','SDF','SECOND','SIGN','SINH','SIN','SKEWNESS',
94            'SOUNDEX','SPEDIS','SQRT','STDERR','STD','STFIPS','STNAME',
95            'STNAMEL','SUBSTR','SUM','SYMGET','SYSGET','SYSMSG','SYSPROD',
96            'SYSRC','SYSTEM','TANH','TAN','TIMEPART','TIME','TINV','TNONCT',
97            'TODAY','TRANSLATE','TRANWRD','TRIGAMMA','TRIMN','TRIM','TRUNC',
98            'UNIFORM','UPCASE','USS','VARFMT','VARINFMT','VARLABEL','VARLEN',
99            'VARNAME','VARNUM','VARRAYX','VARRAY','VARTYPE','VAR','VERIFY',
100            'VFORMATX','VFORMATDX','VFORMATD','VFORMATNX','VFORMATN',
101            'VFORMATWX','VFORMATW','VFORMAT','VINARRAYX','VINARRAY',
102            'VINFORMATX','VINFORMATDX','VINFORMATD','VINFORMATNX','VINFORMATN',
103            'VINFORMATWX','VINFORMATW','VINFORMAT','VLABELX','VLABEL',
104            'VLENGTHX','VLENGTH','VNAMEX','VNAME','VTYPEX','VTYPE','WEEKDAY',
105            'YEAR','YYQ','ZIPFIPS','ZIPNAME','ZIPNAMEL','ZIPSTATE'
106            ),
107        4 => array(
108            'ABORT','ADD','ALTER','AND','ARRAY','AS','ATTRIB','BY','CALL',
109            'CARDS4','CASCADE','CATNAME','CHECK','CONTINUE','CREATE',
110            'DATALINES4','DELETE','DESCRIBE','DISPLAY','DISTINCT','DM','DROP',
111            'ENDSAS','FILE','FOOTNOTE','FOREIGN','FORMAT','FROM',
112            'GOTO','GROUP','HAVING','IN','INFILE','INFORMAT',
113            'INSERT','INTO','KEEP','KEY','LABEL','LEAVE',
114            'LIKE','LINK','LIST','LOSTCARD','MERGE','MESSAGE','MISSING',
115            'MODIFY','MSGTYPE','NOT','NULL','ON','OPTIONS','OR','ORDER',
116            'OUTPUT','PAGE','PRIMARY','REDIRECT','REFERENCES','REMOVE',
117            'RENAME','REPLACE','RESET','RESTRICT','RETAIN','RETURN','SELECT',
118            'SET','SKIP','STARTSAS','STOP','SYSTASK','TABLE','TITLE','UNIQUE',
119            'UPDATE','VALIDATE','VIEW','WAITSAS','WHERE','WINDOW','X'
120            ),
121        5 => array(
122            'DO','ELSE','END','IF','THEN','UNTIL','WHILE'
123            ),
124        6 => array(
125            'RUN','QUIT','DATA'
126            ),
127        7 => array(
128            'ERROR'
129            ),
130        8 => array(
131            'WARNING'
132            ),
133        9 => array(
134            'NOTE'
135            )
136        ),
137    'SYMBOLS' => array(
138        ),
139    'CASE_SENSITIVE' => array(
140        GESHI_COMMENTS => false,
141        1 => false,
142        2 => false,
143        3 => false,
144        4 => false,
145        5 => false,
146        6 => false,
147        7 => false,
148        8 => false,
149        9 => false
150        ),
151    'STYLES' => array(
152        'KEYWORDS' => array(
153            1 => 'color: #0000ff;',
154            2 => 'color: #0000ff;',
155            3 => 'color: #0000ff;',
156            4 => 'color: #0000ff;',
157            5 => 'color: #0000ff;',
158            6 => 'color: #000080; font-weight: bold;',
159            7 => 'color: #ff0000;',
160            8 => 'color: #00ff00;',
161            9 => 'color: #0000ff;'
162            ),
163        'COMMENTS' => array(
164//            1 => 'color: #006400; font-style: italic;',
165            'MULTI' => 'color: #006400; font-style: italic;'
166            ),
167        'ESCAPE_CHAR' => array(
168            0 => 'color: #000099; font-weight: bold;'
169            ),
170        'BRACKETS' => array(
171            0 => 'color: #66cc66;'
172            ),
173        'STRINGS' => array(
174            0 => 'color: #a020f0;'
175            ),
176        'NUMBERS' => array(
177            0 => 'color: #2e8b57; font-weight: bold;'
178            ),
179        'METHODS' => array(
180            ),
181        'SYMBOLS' => array(
182            0 => 'color: #66cc66;'
183            ),
184        'SCRIPT' => array(
185            0 => '',
186            1 => '',
187            2 => '',
188            3 => ''
189            ),
190        'REGEXPS' => array(
191            0 => 'color: #0000ff; font-weight: bold;',
192            1 => 'color: #000080; font-weight: bold;',
193            2 => 'color: #006400; font-style: italic;',
194            3 => 'color: #006400; font-style: italic;',
195            4 => 'color: #006400; font-style: italic;',
196            5 => 'color: #ff0000; font-weight: bold;',
197            6 => 'color: #00ff00; font-style: italic;',
198            7 => 'color: #0000ff; font-style: normal;',
199            8 => 'color: #b218b2; font-weight: bold;',
200            9 => 'color: #b218b2; font-weight: bold;'
201            )
202        ),
203    'URLS' => array(
204        1 => '',
205        2 => '',
206        3 => '',
207        4 => '',
208        5 => '',
209        6 => '',
210        7 => '',
211        8 => '',
212        9 => ''
213        ),
214    'OOLANG' => false,
215    'OBJECT_SPLITTERS' => array(
216        ),
217    'REGEXPS' => array(
218        0 => "&amp;[a-zA-Z_][a-zA-Z0-9_]*",
219        1 => array(//Procedures
220            GESHI_SEARCH => '(^\\s*)(PROC \\w+)',
221            GESHI_REPLACE => '\\2',
222            GESHI_MODIFIERS => 'im',
223            GESHI_BEFORE => '\\1',
224            GESHI_AFTER => ''
225            ),
226        2 => array(
227            GESHI_SEARCH => '(^\\s*)(\\*.*;)',
228            GESHI_REPLACE => '\\2',
229            GESHI_MODIFIERS => 'im',
230            GESHI_BEFORE => '\\1',
231            GESHI_AFTER => ''
232            ),
233        3 => array(
234            GESHI_SEARCH => '(.*;\\s*)(\\*.*;)',
235            GESHI_REPLACE => '\\2',
236            GESHI_MODIFIERS => 'im',
237            GESHI_BEFORE => '\\1',
238            GESHI_AFTER => ''
239            ),
240        4 => array(
241            GESHI_SEARCH => '(^\\s*)(%\\*.*;)',
242            GESHI_REPLACE => '\\2',
243            GESHI_MODIFIERS => 'im',
244            GESHI_BEFORE => '\\1',
245            GESHI_AFTER => ''
246            ),
247        5 => array(//Error messages
248            GESHI_SEARCH => '(^ERROR.*)',
249            GESHI_REPLACE => '\\1',
250            GESHI_MODIFIERS => 'im',
251            GESHI_BEFORE => '',
252            GESHI_AFTER => ''
253            ),
254        6 => array(//Warning messages
255            GESHI_SEARCH => '(^WARNING.*)',
256            GESHI_REPLACE => '\\1',
257            GESHI_MODIFIERS => 'im',
258            GESHI_BEFORE => '',
259            GESHI_AFTER => ''
260            ),
261        7 => array(//Notice messages
262            GESHI_SEARCH => '(^NOTE.*)',
263            GESHI_REPLACE => '\\1',
264            GESHI_MODIFIERS => 'im',
265            GESHI_BEFORE => '',
266            GESHI_AFTER => ''
267            ),
268        8 => array(
269            GESHI_SEARCH => '(^\\s*)(CARDS.*)(^\\s*;\\s*$)',
270            GESHI_REPLACE => '\\2',
271            GESHI_MODIFIERS => 'sim',
272            GESHI_BEFORE => '\\1',
273            GESHI_AFTER => '\\3'
274            ),
275        9 => array(
276            GESHI_SEARCH => '(^\\s*)(DATALINES.*)(^\\s*;\\s*$)',
277            GESHI_REPLACE => '\\2',
278            GESHI_MODIFIERS => 'sim',
279            GESHI_BEFORE => '\\1',
280            GESHI_AFTER => '\\3'
281            )
282        ),
283    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
284    'SCRIPT_DELIMITERS' => array(
285        ),
286    'HIGHLIGHT_STRICT_BLOCK' => array(
287        )
288);
289