@@ -5,128 +5,131 @@ Description: Syntax Highlighting for SAS
55*/
66
77export default function ( hljs ) {
8+ // Data step and PROC SQL statements
9+ const SAS_KEYWORDS =
10+ 'do if then else end until while ' +
11+ '' +
12+ 'abort array attrib by call cards cards4 catname continue ' +
13+ 'datalines datalines4 delete delim delimiter display dm drop ' +
14+ 'endsas error file filename footnote format goto in infile ' +
15+ 'informat input keep label leave length libname link list ' +
16+ 'lostcard merge missing modify options output out page put ' +
17+ 'redirect remove rename replace retain return select set skip ' +
18+ 'startsas stop title update waitsas where window x systask ' +
19+ '' +
20+ 'add and alter as cascade check create delete describe ' +
21+ 'distinct drop foreign from group having index insert into in ' +
22+ 'key like message modify msgtype not null on or order primary ' +
23+ 'references reset restrict select set table unique update ' +
24+ 'validate view where' ;
825
9- // Data step and PROC SQL statements
10- var SAS_KEYWORDS = '' +
11- 'do if then else end until while ' +
12- '' +
13- 'abort array attrib by call cards cards4 catname continue ' +
14- 'datalines datalines4 delete delim delimiter display dm drop ' +
15- 'endsas error file filename footnote format goto in infile ' +
16- 'informat input keep label leave length libname link list ' +
17- 'lostcard merge missing modify options output out page put ' +
18- 'redirect remove rename replace retain return select set skip ' +
19- 'startsas stop title update waitsas where window x systask ' +
20- '' +
21- 'add and alter as cascade check create delete describe ' +
22- 'distinct drop foreign from group having index insert into in ' +
23- 'key like message modify msgtype not null on or order primary ' +
24- 'references reset restrict select set table unique update ' +
25- 'validate view where' ;
26+ // Built-in SAS functions
27+ const SAS_FUN =
28+ 'abs|addr|airy|arcos|arsin|atan|attrc|attrn|band|' +
29+ 'betainv|blshift|bnot|bor|brshift|bxor|byte|cdf|ceil|' +
30+ 'cexist|cinv|close|cnonct|collate|compbl|compound|' +
31+ 'compress|cos|cosh|css|curobs|cv|daccdb|daccdbsl|' +
32+ 'daccsl|daccsyd|dacctab|dairy|date|datejul|datepart|' +
33+ 'datetime|day|dclose|depdb|depdbsl|depdbsl|depsl|' +
34+ 'depsl|depsyd|depsyd|deptab|deptab|dequote|dhms|dif|' +
35+ 'digamma|dim|dinfo|dnum|dopen|doptname|doptnum|dread|' +
36+ 'dropnote|dsname|erf|erfc|exist|exp|fappend|fclose|' +
37+ 'fcol|fdelete|fetch|fetchobs|fexist|fget|fileexist|' +
38+ 'filename|fileref|finfo|finv|fipname|fipnamel|' +
39+ 'fipstate|floor|fnonct|fnote|fopen|foptname|foptnum|' +
40+ 'fpoint|fpos|fput|fread|frewind|frlen|fsep|fuzz|' +
41+ 'fwrite|gaminv|gamma|getoption|getvarc|getvarn|hbound|' +
42+ 'hms|hosthelp|hour|ibessel|index|indexc|indexw|input|' +
43+ 'inputc|inputn|int|intck|intnx|intrr|irr|jbessel|' +
44+ 'juldate|kurtosis|lag|lbound|left|length|lgamma|' +
45+ 'libname|libref|log|log10|log2|logpdf|logpmf|logsdf|' +
46+ 'lowcase|max|mdy|mean|min|minute|mod|month|mopen|' +
47+ 'mort|n|netpv|nmiss|normal|note|npv|open|ordinal|' +
48+ 'pathname|pdf|peek|peekc|pmf|point|poisson|poke|' +
49+ 'probbeta|probbnml|probchi|probf|probgam|probhypr|' +
50+ 'probit|probnegb|probnorm|probt|put|putc|putn|qtr|' +
51+ 'quote|ranbin|rancau|ranexp|rangam|range|rank|rannor|' +
52+ 'ranpoi|rantbl|rantri|ranuni|repeat|resolve|reverse|' +
53+ 'rewind|right|round|saving|scan|sdf|second|sign|' +
54+ 'sin|sinh|skewness|soundex|spedis|sqrt|std|stderr|' +
55+ 'stfips|stname|stnamel|substr|sum|symget|sysget|' +
56+ 'sysmsg|sysprod|sysrc|system|tan|tanh|time|timepart|' +
57+ 'tinv|tnonct|today|translate|tranwrd|trigamma|' +
58+ 'trim|trimn|trunc|uniform|upcase|uss|var|varfmt|' +
59+ 'varinfmt|varlabel|varlen|varname|varnum|varray|' +
60+ 'varrayx|vartype|verify|vformat|vformatd|vformatdx|' +
61+ 'vformatn|vformatnx|vformatw|vformatwx|vformatx|' +
62+ 'vinarray|vinarrayx|vinformat|vinformatd|vinformatdx|' +
63+ 'vinformatn|vinformatnx|vinformatw|vinformatwx|' +
64+ 'vinformatx|vlabel|vlabelx|vlength|vlengthx|vname|' +
65+ 'vnamex|vtype|vtypex|weekday|year|yyq|zipfips|zipname|' +
66+ 'zipnamel|zipstate' ;
2667
27- // Built-in SAS functions
28- var SAS_FUN = '' +
29- 'abs|addr|airy|arcos|arsin|atan|attrc|attrn|band|' +
30- 'betainv|blshift|bnot|bor|brshift|bxor|byte|cdf|ceil|' +
31- 'cexist|cinv|close|cnonct|collate|compbl|compound|' +
32- 'compress|cos|cosh|css|curobs|cv|daccdb|daccdbsl|' +
33- 'daccsl|daccsyd|dacctab|dairy|date|datejul|datepart|' +
34- 'datetime|day|dclose|depdb|depdbsl|depdbsl|depsl|' +
35- 'depsl|depsyd|depsyd|deptab|deptab|dequote|dhms|dif|' +
36- 'digamma|dim|dinfo|dnum|dopen|doptname|doptnum|dread|' +
37- 'dropnote|dsname|erf|erfc|exist|exp|fappend|fclose|' +
38- 'fcol|fdelete|fetch|fetchobs|fexist|fget|fileexist|' +
39- 'filename|fileref|finfo|finv|fipname|fipnamel|' +
40- 'fipstate|floor|fnonct|fnote|fopen|foptname|foptnum|' +
41- 'fpoint|fpos|fput|fread|frewind|frlen|fsep|fuzz|' +
42- 'fwrite|gaminv|gamma|getoption|getvarc|getvarn|hbound|' +
43- 'hms|hosthelp|hour|ibessel|index|indexc|indexw|input|' +
44- 'inputc|inputn|int|intck|intnx|intrr|irr|jbessel|' +
45- 'juldate|kurtosis|lag|lbound|left|length|lgamma|' +
46- 'libname|libref|log|log10|log2|logpdf|logpmf|logsdf|' +
47- 'lowcase|max|mdy|mean|min|minute|mod|month|mopen|' +
48- 'mort|n|netpv|nmiss|normal|note|npv|open|ordinal|' +
49- 'pathname|pdf|peek|peekc|pmf|point|poisson|poke|' +
50- 'probbeta|probbnml|probchi|probf|probgam|probhypr|' +
51- 'probit|probnegb|probnorm|probt|put|putc|putn|qtr|' +
52- 'quote|ranbin|rancau|ranexp|rangam|range|rank|rannor|' +
53- 'ranpoi|rantbl|rantri|ranuni|repeat|resolve|reverse|' +
54- 'rewind|right|round|saving|scan|sdf|second|sign|' +
55- 'sin|sinh|skewness|soundex|spedis|sqrt|std|stderr|' +
56- 'stfips|stname|stnamel|substr|sum|symget|sysget|' +
57- 'sysmsg|sysprod|sysrc|system|tan|tanh|time|timepart|' +
58- 'tinv|tnonct|today|translate|tranwrd|trigamma|' +
59- 'trim|trimn|trunc|uniform|upcase|uss|var|varfmt|' +
60- 'varinfmt|varlabel|varlen|varname|varnum|varray|' +
61- 'varrayx|vartype|verify|vformat|vformatd|vformatdx|' +
62- 'vformatn|vformatnx|vformatw|vformatwx|vformatx|' +
63- 'vinarray|vinarrayx|vinformat|vinformatd|vinformatdx|' +
64- 'vinformatn|vinformatnx|vinformatw|vinformatwx|' +
65- 'vinformatx|vlabel|vlabelx|vlength|vlengthx|vname|' +
66- 'vnamex|vtype|vtypex|weekday|year|yyq|zipfips|zipname|' +
67- 'zipnamel|zipstate' ;
68+ // Built-in macro functions
69+ const SAS_MACRO_FUN =
70+ 'bquote|nrbquote|cmpres|qcmpres|compstor|' +
71+ 'datatyp|display|do|else|end|eval|global|goto|' +
72+ 'if|index|input|keydef|label|left|length|let|' +
73+ 'local|lowcase|macro|mend|nrbquote|nrquote|' +
74+ 'nrstr|put|qcmpres|qleft|qlowcase|qscan|' +
75+ 'qsubstr|qsysfunc|qtrim|quote|qupcase|scan|str|' +
76+ 'substr|superq|syscall|sysevalf|sysexec|sysfunc|' +
77+ 'sysget|syslput|sysprod|sysrc|sysrput|then|to|' +
78+ 'trim|unquote|until|upcase|verify|while|window' ;
6879
69- // Built-in macro functions
70- var SAS_MACRO_FUN = 'bquote|nrbquote|cmpres|qcmpres|compstor|' +
71- 'datatyp|display|do|else|end|eval|global|goto|' +
72- 'if|index|input|keydef|label|left|length|let|' +
73- 'local|lowcase|macro|mend|nrbquote|nrquote|' +
74- 'nrstr|put|qcmpres|qleft|qlowcase|qscan|' +
75- 'qsubstr|qsysfunc|qtrim|quote|qupcase|scan|str|' +
76- 'substr|superq|syscall|sysevalf|sysexec|sysfunc|' +
77- 'sysget|syslput|sysprod|sysrc|sysrput|then|to|' +
78- 'trim|unquote|until|upcase|verify|while|window' ;
79-
80- return {
81- name : 'SAS' ,
82- aliases : [ 'sas' , 'SAS' ] ,
83- case_insensitive : true , // SAS is case-insensitive
84- keywords : {
85- literal :
86- 'null missing _all_ _automatic_ _character_ _infile_ ' +
87- '_n_ _name_ _null_ _numeric_ _user_ _webout_' ,
88- meta :
89- SAS_KEYWORDS
90- } ,
91- contains : [
92- {
93- // Distinct highlight for proc <proc>, data, run, quit
94- className : 'keyword' ,
95- begin : / ^ \s * ( p r o c [ \w \d _ ] + | d a t a | r u n | q u i t ) [ \s ; ] /
96- } ,
97- {
98- // Macro variables
99- className : 'variable' ,
100- begin : / & [ a - z A - Z _ & ] [ a - z A - Z 0 - 9 _ ] * \. ? /
101- } ,
102- {
103- // Special emphasis for datalines|cards
104- className : 'emphasis' ,
105- begin : / ^ \s * d a t a l i n e s | c a r d s .* ; / ,
106- end : / ^ \s * ; \s * $ /
107- } ,
108- { // Built-in macro variables take precedence
109- className : 'built_in' ,
110- begin : '%(' + SAS_MACRO_FUN + ')'
111- } ,
112- {
113- // User-defined macro functions highlighted after
114- className : 'name' ,
115- begin : / % [ a - z A - Z _ ] [ a - z A - Z _ 0 - 9 ] * /
116- } ,
117- {
118- className : 'meta' ,
119- begin : '[^%](' + SAS_FUN + ')[\(]'
120- } ,
121- {
122- className : 'string' ,
123- variants : [
124- hljs . APOS_STRING_MODE ,
125- hljs . QUOTE_STRING_MODE
126- ]
127- } ,
128- hljs . COMMENT ( '\\*' , ';' ) ,
129- hljs . C_BLOCK_COMMENT_MODE
80+ return {
81+ name : 'SAS' ,
82+ aliases : [
83+ 'sas' ,
84+ 'SAS'
85+ ] ,
86+ case_insensitive : true , // SAS is case-insensitive
87+ keywords : {
88+ literal :
89+ 'null missing _all_ _automatic_ _character_ _infile_ ' +
90+ '_n_ _name_ _null_ _numeric_ _user_ _webout_' ,
91+ meta :
92+ SAS_KEYWORDS
93+ } ,
94+ contains : [
95+ {
96+ // Distinct highlight for proc <proc>, data, run, quit
97+ className : 'keyword' ,
98+ begin : / ^ \s * ( p r o c [ \w \d _ ] + | d a t a | r u n | q u i t ) [ \s ; ] /
99+ } ,
100+ {
101+ // Macro variables
102+ className : 'variable' ,
103+ begin : / & [ a - z A - Z _ & ] [ a - z A - Z 0 - 9 _ ] * \. ? /
104+ } ,
105+ {
106+ // Special emphasis for datalines|cards
107+ className : 'emphasis' ,
108+ begin : / ^ \s * d a t a l i n e s | c a r d s .* ; / ,
109+ end : / ^ \s * ; \s * $ /
110+ } ,
111+ { // Built-in macro variables take precedence
112+ className : 'built_in' ,
113+ begin : '%(' + SAS_MACRO_FUN + ')'
114+ } ,
115+ {
116+ // User-defined macro functions highlighted after
117+ className : 'name' ,
118+ begin : / % [ a - z A - Z _ ] [ a - z A - Z _ 0 - 9 ] * /
119+ } ,
120+ {
121+ className : 'meta' ,
122+ begin : '[^%](' + SAS_FUN + ')[\(]'
123+ } ,
124+ {
125+ className : 'string' ,
126+ variants : [
127+ hljs . APOS_STRING_MODE ,
128+ hljs . QUOTE_STRING_MODE
130129 ]
131- } ;
130+ } ,
131+ hljs . COMMENT ( '\\*' , ';' ) ,
132+ hljs . C_BLOCK_COMMENT_MODE
133+ ]
134+ } ;
132135}
0 commit comments