diff --git a/components/prism-sas.js b/components/prism-sas.js index bb152e721f..ae50e62f0b 100644 --- a/components/prism-sas.js +++ b/components/prism-sas.js @@ -8,6 +8,16 @@ alias: 'number' }; + var macroVariable = { + pattern: /&[a-z_][a-z_0-9]*/i + }; + + var macroKeyword = { + pattern: /((?:^|\s|=|\())%(?:ABORT|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUPCASE|RETURN|RUN|SCAN|SUBSTR|SUPERQ|SYMDEL|SYMGLOBL|SYMLOCAL|SYMEXIST|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\b/i, + lookbehind: true, + alias: 'keyword' + }; + var step = { pattern: /(^|\s+)(?:proc\s+\w+|quit|run|data(?!\=))\b/i, alias: 'keyword', @@ -41,10 +51,7 @@ lookbehind: true }, 'operator': /=/, - 'macro-variable': { - pattern: /&[^\.]*\./i, - alias: 'string' - }, + 'macro-variable': macroVariable, 'arg': { pattern: /[A-Z]+/i, alias: 'keyword' @@ -237,6 +244,9 @@ lookbehind: true, inside: args }, + /*Special keywords within macros*/ + 'macro-keyword': macroKeyword, + 'macro-variable': macroVariable, 'macro-string-functions': { pattern: /((?:^|\s|=))%(?:NRBQUOTE|NRQUOTE|NRSTR|BQUOTE|QUOTE|STR)\(.*?(?:[^%]\))/i, lookbehind: true, @@ -245,19 +255,14 @@ pattern: /%(?:NRBQUOTE|NRQUOTE|NRSTR|BQUOTE|QUOTE|STR)/i, alias: 'keyword' }, - 'string': { - pattern: /(\()[^)]+/, - lookbehind: true + 'macro-keyword': macroKeyword, + 'macro-variable': macroVariable, + 'escaped-char': { + pattern: /%['"()<>=¬^~;,#]/i, }, 'punctuation': punctuation } }, - /*Special keywords within macros*/ - 'macro-keyword': { - pattern: /((?:^|\s)=?)%(?:ABORT|BQUOTE|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|NRBQUOTE|NRQUOTE|NRSTR|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUOTE|QUPCASE|RETURN|RUN|SCAN|STR|SUBSTR|SUPERQ|SYMDEL|SYMGLOBL|SYMLOCAL|SYMEXIST|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\b/i, - lookbehind: true, - alias: 'keyword' - }, 'macro-declaration': { pattern: /^%macro[^;]+(?=;)/im, inside: { diff --git a/components/prism-sas.min.js b/components/prism-sas.min.js index 5659c4a19c..65b5b89861 100644 --- a/components/prism-sas.min.js +++ b/components/prism-sas.min.js @@ -1 +1 @@ -!function(e){var t="(?:\"(?:\"\"|[^\"])*\"(?!\")|'(?:''|[^'])*'(?!'))",a=/\b(?:\d[\da-f]*x|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,n={pattern:RegExp(t+"[bx]"),alias:"number"},i={pattern:/(^|\s+)(?:proc\s+\w+|quit|run|data(?!\=))\b/i,alias:"keyword",lookbehind:!0},s=[/\/\*[\s\S]*?\*\//,{pattern:/(^\s*|;\s*)\*[^;]*;/m,lookbehind:!0}],r={pattern:RegExp(t),greedy:!0},o=/[$%@.(){}\[\];,\\]/,l={pattern:/%?\w+(?=\()/,alias:"keyword"},c={function:l,"arg-value":{pattern:/(\s*=\s*)[A-Z\.]+/i,lookbehind:!0},operator:/=/,"macro-variable":{pattern:/&[^\.]*\./i,alias:"string"},arg:{pattern:/[A-Z]+/i,alias:"keyword"},number:a,"numeric-constant":n,punctuation:o,string:r},d={pattern:/\b(?:format|put)\b=?[\w'$.]+/im,inside:{keyword:/^(?:format|put)(?=\=)/i,equals:/=/,format:{pattern:/(?:\w|\$\d)+\.\d?/i,alias:"number"}}},p={pattern:/\b(?:format|put)\s+[\w']+(?:\s+[$.\w]+)+(?=;)/i,inside:{keyword:/^(?:format|put)/i,format:{pattern:/[\w$]+\.\d?/,alias:"number"}}},u={pattern:/((?:^|[\s])=?)(?:catname|checkpoint execute_always|dm|endsas|filename|footnote|%include|libname|%list|lock|missing|options|page|resetline|%run|sasfile|skip|sysecho|title\d?)\b/i,lookbehind:!0,alias:"keyword"},m={pattern:/(^|\s)(?:submit(?:\s+(?:load|parseonly|norun))?|endsubmit)\b/i,lookbehind:!0,alias:"keyword"},b="accessControl|cdm|aggregation|aStore|ruleMining|audio|autotune|bayesianNetClassifier|bioMedImage|boolRule|builtins|cardinality|sccasl|clustering|copula|countreg|dataDiscovery|dataPreprocess|dataSciencePilot|dataStep|decisionTree|deepLearn|deepNeural|varReduce|simSystem|ds2|deduplication|ecm|entityRes|espCluster|explainModel|factmac|fastKnn|fcmpact|fedSql|freqTab|gam|gleam|graphSemiSupLearn|gVarCluster|hiddenMarkovModel|hyperGroup|image|iml|ica|kernalPca|langModel|ldaTopic|sparseML|mlTools|mixed|modelPublishing|mbc|network|optNetwork|neuralNet|nonlinear|nmf|nonParametricBayes|optimization|panel|pls|percentile|pca|phreg|qkb|qlim|quantreg|recommend|tsReconcile|deepRnn|regression|reinforcementLearn|robustPca|sampling|sparkEmbeddedProcess|search(?:Analytics)?|sentimentAnalysis|sequence|configuration|session(?:Prop)?|severity|simple|smartData|sandwich|spatialreg|stabilityMonitoring|spc|loadStreams|svDataDescription|svm|table|conditionalRandomFields|text(?:Rule(?:Develop|Score)|Mining|Parse|Topic|Util|Filters|Frequency)|tsInfo|timeData|transpose|uniTimeSeries",g={pattern:RegExp("(^|\\s)(?:action\\s+)?(?:)\\.[a-z]+\\b[^;]+".replace(//g,function(){return b}),"i"),lookbehind:!0,inside:{keyword:RegExp("(?:)\\.[a-z]+\\b".replace(//g,function(){return b}),"i"),action:{pattern:/(?:action)/i,alias:"keyword"},comment:s,function:l,"arg-value":c["arg-value"],operator:c.operator,argument:c.arg,number:a,"numeric-constant":n,punctuation:o,string:r}},k={pattern:/((?:^|\s)=?)(?:after|analysis|and|array|barchart|barwidth|begingraph|by|call|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|continue|data(?=\=)|define|delete|describe|document|do\s+over|do|dol|drop|dul|end(?:source|comp)?|entryTitle|else|eval(?:uate)?|exec(?:ute)?|exit|fill(?:attrs)?|file(?:name)?|flist|fnc|function(?:list)?|goto|global|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|leave|legendlabel|length|libname|loadactionset|merge|midpoints|name|noobs|nowd|_?null_|ods|options|or|otherwise|out(?:put)?|over(?:lay)?|plot|put|print|raise|ranexp|rannor|rbreak|retain|return|select|set|session|sessref|source|statgraph|sum|summarize|table|temp|terminate|then\s+do|then|title\d?|to|var|when|where|xaxisopts|yaxisopts|y2axisopts)\b/i,lookbehind:!0};e.languages.sas={datalines:{pattern:/^(\s*)(?:(?:data)?lines|cards);[\s\S]+?^\s*;/im,lookbehind:!0,alias:"string",inside:{keyword:{pattern:/^(?:(?:data)?lines|cards)/i},punctuation:/;/}},"proc-sql":{pattern:/(^proc\s+(?:fed)?sql(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,lookbehind:!0,inside:{sql:{pattern:RegExp("^[ \t]*(?:select|alter\\s+table|(?:create|describe|drop)\\s+(?:index|table(?:\\s+constraints)?|view)|create\\s+unique\\s+index|insert\\s+into|update)(?:|[^;\"'])+;".replace(//g,function(){return t}),"im"),alias:"language-sql",inside:e.languages.sql},"global-statements":u,"sql-statements":{pattern:/(^|\s)(?:disconnect\s+from|exec(?:ute)?|begin|commit|rollback|reset|validate)\b/i,lookbehind:!0,alias:"keyword"},number:a,"numeric-constant":n,punctuation:o,string:r}},"proc-groovy":{pattern:/(^proc\s+groovy(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:s,groovy:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|parseonly|norun))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,function(){return t}),"im"),lookbehind:!0,alias:"language-groovy",inside:e.languages.groovy},keyword:k,"submit-statement":m,"global-statements":u,number:a,"numeric-constant":n,punctuation:o,string:r}},"proc-lua":{pattern:/(^proc\s+lua(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:s,lua:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|parseonly|norun))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,function(){return t}),"im"),lookbehind:!0,alias:"language-lua",inside:e.languages.lua},keyword:k,"submit-statement":m,"global-statements":u,number:a,"numeric-constant":n,punctuation:o,string:r}},"proc-cas":{pattern:/(^proc\s+cas(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:s,"statement-var":{pattern:/((?:^|\s)=?)saveresult\s+[^;]+/im,lookbehind:!0,inside:{statement:{pattern:/^saveresult\s+\S+/i,inside:{keyword:/^(?:saveresult)/i}},rest:c}},"cas-actions":g,statement:{pattern:/((?:^|\s)=?)(?:default|(?:un)?set|on|output|upload)[^;]+/im,lookbehind:!0,inside:c},step:i,keyword:k,function:l,format:d,altformat:p,"global-statements":u,number:a,"numeric-constant":n,punctuation:o,string:r}},"proc-args":{pattern:RegExp("(^proc\\s+\\w+\\s+)(?!\\s)(?:[^;\"']|)+;".replace(//g,function(){return t}),"im"),lookbehind:!0,inside:c},"macro-string-functions":{pattern:/((?:^|\s|=))%(?:NRBQUOTE|NRQUOTE|NRSTR|BQUOTE|QUOTE|STR)\(.*?(?:[^%]\))/i,lookbehind:!0,inside:{function:{pattern:/%(?:NRBQUOTE|NRQUOTE|NRSTR|BQUOTE|QUOTE|STR)/i,alias:"keyword"},string:{pattern:/(\()[^)]+/,lookbehind:!0},punctuation:o}},"macro-keyword":{pattern:/((?:^|\s)=?)%(?:ABORT|BQUOTE|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|NRBQUOTE|NRQUOTE|NRSTR|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUOTE|QUPCASE|RETURN|RUN|SCAN|STR|SUBSTR|SUPERQ|SYMDEL|SYMGLOBL|SYMLOCAL|SYMEXIST|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\b/i,lookbehind:!0,alias:"keyword"},"macro-declaration":{pattern:/^%macro[^;]+(?=;)/im,inside:{keyword:/%macro/i}},"macro-end":{pattern:/^%mend[^;]+(?=;)/im,inside:{keyword:/%mend/i}},macro:{pattern:/%_\w+(?=\()/,alias:"keyword"},input:{pattern:/\binput\s+[-\w\s/*.$&]+;/i,inside:{input:{alias:"keyword",pattern:/^input/i},comment:s,number:a,"numeric-constant":n}},"options-args":{pattern:/(^options)[-'"|/\\<>*+=:()\w\s]*(?=;)/im,lookbehind:!0,inside:c},"cas-actions":g,comment:s,function:l,format:d,altformat:p,"numeric-constant":n,datetime:{pattern:RegExp(t+"(?:dt?|t)"),alias:"number"},string:r,step:i,keyword:k,"operator-keyword":{pattern:/\b(?:eq|ne|gt|lt|ge|le|in|not)\b/i,alias:"operator"},number:a,operator:/\*\*?|\|\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\/=&]|[~¬^]=?/i,punctuation:o}}(Prism); \ No newline at end of file +!function(e){var t="(?:\"(?:\"\"|[^\"])*\"(?!\")|'(?:''|[^'])*'(?!'))",a=/\b(?:\d[\da-f]*x|\d+(?:\.\d+)?(?:e[+-]?\d+)?)\b/i,n={pattern:RegExp(t+"[bx]"),alias:"number"},i={pattern:/&[a-z_][a-z_0-9]*/i},r={pattern:/((?:^|\s|=|\())%(?:ABORT|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUPCASE|RETURN|RUN|SCAN|SUBSTR|SUPERQ|SYMDEL|SYMGLOBL|SYMLOCAL|SYMEXIST|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\b/i,lookbehind:!0,alias:"keyword"},s={pattern:/(^|\s+)(?:proc\s+\w+|quit|run|data(?!\=))\b/i,alias:"keyword",lookbehind:!0},o=[/\/\*[\s\S]*?\*\//,{pattern:/(^\s*|;\s*)\*[^;]*;/m,lookbehind:!0}],l={pattern:RegExp(t),greedy:!0},c=/[$%@.(){}\[\];,\\]/,d={pattern:/%?\w+(?=\()/,alias:"keyword"},p={function:d,"arg-value":{pattern:/(\s*=\s*)[A-Z\.]+/i,lookbehind:!0},operator:/=/,"macro-variable":i,arg:{pattern:/[A-Z]+/i,alias:"keyword"},number:a,"numeric-constant":n,punctuation:c,string:l},u={pattern:/\b(?:format|put)\b=?[\w'$.]+/im,inside:{keyword:/^(?:format|put)(?=\=)/i,equals:/=/,format:{pattern:/(?:\w|\$\d)+\.\d?/i,alias:"number"}}},m={pattern:/\b(?:format|put)\s+[\w']+(?:\s+[$.\w]+)+(?=;)/i,inside:{keyword:/^(?:format|put)/i,format:{pattern:/[\w$]+\.\d?/,alias:"number"}}},b={pattern:/((?:^|[\s])=?)(?:catname|checkpoint execute_always|dm|endsas|filename|footnote|%include|libname|%list|lock|missing|options|page|resetline|%run|sasfile|skip|sysecho|title\d?)\b/i,lookbehind:!0,alias:"keyword"},g={pattern:/(^|\s)(?:submit(?:\s+(?:load|parseonly|norun))?|endsubmit)\b/i,lookbehind:!0,alias:"keyword"},k="accessControl|cdm|aggregation|aStore|ruleMining|audio|autotune|bayesianNetClassifier|bioMedImage|boolRule|builtins|cardinality|sccasl|clustering|copula|countreg|dataDiscovery|dataPreprocess|dataSciencePilot|dataStep|decisionTree|deepLearn|deepNeural|varReduce|simSystem|ds2|deduplication|ecm|entityRes|espCluster|explainModel|factmac|fastKnn|fcmpact|fedSql|freqTab|gam|gleam|graphSemiSupLearn|gVarCluster|hiddenMarkovModel|hyperGroup|image|iml|ica|kernalPca|langModel|ldaTopic|sparseML|mlTools|mixed|modelPublishing|mbc|network|optNetwork|neuralNet|nonlinear|nmf|nonParametricBayes|optimization|panel|pls|percentile|pca|phreg|qkb|qlim|quantreg|recommend|tsReconcile|deepRnn|regression|reinforcementLearn|robustPca|sampling|sparkEmbeddedProcess|search(?:Analytics)?|sentimentAnalysis|sequence|configuration|session(?:Prop)?|severity|simple|smartData|sandwich|spatialreg|stabilityMonitoring|spc|loadStreams|svDataDescription|svm|table|conditionalRandomFields|text(?:Rule(?:Develop|Score)|Mining|Parse|Topic|Util|Filters|Frequency)|tsInfo|timeData|transpose|uniTimeSeries",y={pattern:RegExp("(^|\\s)(?:action\\s+)?(?:)\\.[a-z]+\\b[^;]+".replace(//g,function(){return k}),"i"),lookbehind:!0,inside:{keyword:RegExp("(?:)\\.[a-z]+\\b".replace(//g,function(){return k}),"i"),action:{pattern:/(?:action)/i,alias:"keyword"},comment:o,function:d,"arg-value":p["arg-value"],operator:p.operator,argument:p.arg,number:a,"numeric-constant":n,punctuation:c,string:l}},S={pattern:/((?:^|\s)=?)(?:after|analysis|and|array|barchart|barwidth|begingraph|by|call|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|continue|data(?=\=)|define|delete|describe|document|do\s+over|do|dol|drop|dul|end(?:source|comp)?|entryTitle|else|eval(?:uate)?|exec(?:ute)?|exit|fill(?:attrs)?|file(?:name)?|flist|fnc|function(?:list)?|goto|global|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|leave|legendlabel|length|libname|loadactionset|merge|midpoints|name|noobs|nowd|_?null_|ods|options|or|otherwise|out(?:put)?|over(?:lay)?|plot|put|print|raise|ranexp|rannor|rbreak|retain|return|select|set|session|sessref|source|statgraph|sum|summarize|table|temp|terminate|then\s+do|then|title\d?|to|var|when|where|xaxisopts|yaxisopts|y2axisopts)\b/i,lookbehind:!0};e.languages.sas={datalines:{pattern:/^(\s*)(?:(?:data)?lines|cards);[\s\S]+?^\s*;/im,lookbehind:!0,alias:"string",inside:{keyword:{pattern:/^(?:(?:data)?lines|cards)/i},punctuation:/;/}},"proc-sql":{pattern:/(^proc\s+(?:fed)?sql(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,lookbehind:!0,inside:{sql:{pattern:RegExp("^[ \t]*(?:select|alter\\s+table|(?:create|describe|drop)\\s+(?:index|table(?:\\s+constraints)?|view)|create\\s+unique\\s+index|insert\\s+into|update)(?:|[^;\"'])+;".replace(//g,function(){return t}),"im"),alias:"language-sql",inside:e.languages.sql},"global-statements":b,"sql-statements":{pattern:/(^|\s)(?:disconnect\s+from|exec(?:ute)?|begin|commit|rollback|reset|validate)\b/i,lookbehind:!0,alias:"keyword"},number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-groovy":{pattern:/(^proc\s+groovy(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,groovy:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|parseonly|norun))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,function(){return t}),"im"),lookbehind:!0,alias:"language-groovy",inside:e.languages.groovy},keyword:S,"submit-statement":g,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-lua":{pattern:/(^proc\s+lua(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,lua:{pattern:RegExp("(^[ \t]*submit(?:\\s+(?:load|parseonly|norun))?)(?:|[^\"'])+?(?=endsubmit;)".replace(//g,function(){return t}),"im"),lookbehind:!0,alias:"language-lua",inside:e.languages.lua},keyword:S,"submit-statement":g,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-cas":{pattern:/(^proc\s+cas(?:\s+[\w|=]+)?;)[\s\S]+?(?=^(?:proc\s+\w+|quit|data);|(?![\s\S]))/im,lookbehind:!0,inside:{comment:o,"statement-var":{pattern:/((?:^|\s)=?)saveresult\s+[^;]+/im,lookbehind:!0,inside:{statement:{pattern:/^saveresult\s+\S+/i,inside:{keyword:/^(?:saveresult)/i}},rest:p}},"cas-actions":y,statement:{pattern:/((?:^|\s)=?)(?:default|(?:un)?set|on|output|upload)[^;]+/im,lookbehind:!0,inside:p},step:s,keyword:S,function:d,format:u,altformat:m,"global-statements":b,number:a,"numeric-constant":n,punctuation:c,string:l}},"proc-args":{pattern:RegExp("(^proc\\s+\\w+\\s+)(?!\\s)(?:[^;\"']|)+;".replace(//g,function(){return t}),"im"),lookbehind:!0,inside:p},"macro-keyword":r,"macro-variable":i,"macro-string-functions":{pattern:/((?:^|\s|=))%(?:NRBQUOTE|NRQUOTE|NRSTR|BQUOTE|QUOTE|STR)\(.*?(?:[^%]\))/i,lookbehind:!0,inside:{function:{pattern:/%(?:NRBQUOTE|NRQUOTE|NRSTR|BQUOTE|QUOTE|STR)/i,alias:"keyword"},"macro-keyword":r,"macro-variable":i,"escaped-char":{pattern:/%['"()<>=¬^~;,#]/i},punctuation:c}},"macro-declaration":{pattern:/^%macro[^;]+(?=;)/im,inside:{keyword:/%macro/i}},"macro-end":{pattern:/^%mend[^;]+(?=;)/im,inside:{keyword:/%mend/i}},macro:{pattern:/%_\w+(?=\()/,alias:"keyword"},input:{pattern:/\binput\s+[-\w\s/*.$&]+;/i,inside:{input:{alias:"keyword",pattern:/^input/i},comment:o,number:a,"numeric-constant":n}},"options-args":{pattern:/(^options)[-'"|/\\<>*+=:()\w\s]*(?=;)/im,lookbehind:!0,inside:p},"cas-actions":y,comment:o,function:d,format:u,altformat:m,"numeric-constant":n,datetime:{pattern:RegExp(t+"(?:dt?|t)"),alias:"number"},string:l,step:s,keyword:S,"operator-keyword":{pattern:/\b(?:eq|ne|gt|lt|ge|le|in|not)\b/i,alias:"operator"},number:a,operator:/\*\*?|\|\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\/=&]|[~¬^]=?/i,punctuation:c}}(Prism); \ No newline at end of file diff --git a/tests/languages/sas/macro_string_function_feature.test b/tests/languages/sas/macro_string_function_feature.test index 20dcc3600a..5b681b3051 100644 --- a/tests/languages/sas/macro_string_function_feature.test +++ b/tests/languages/sas/macro_string_function_feature.test @@ -1,88 +1,95 @@ -%let a=%bquote(' "); -%let b=%nrbquote(' "); -%let c=%nrquote(%' %"); -%let d=%nrstr(%' %"); -%let e=%quote(%' %"); -%let f=%str(%' %"); - ----------------------------------------------------- - -[ - ["macro-keyword", "%let"], - " a", - ["operator", "="], - ["macro-string-functions", - [ - ["function", "%bquote"], - ["punctuation", "("], - ["string", "' \""], - ["punctuation", ")"] - ] - ], - ["punctuation", ";"], - ["macro-keyword", "%let"], - " b", - ["operator", "="], - ["macro-string-functions", - [ - ["function", "%nrbquote"], - ["punctuation", "("], - ["string", "' \""], - ["punctuation", ")"] - ] - ], - ["punctuation", ";"], - ["macro-keyword", "%let"], - " c", - ["operator", "="], - ["macro-string-functions", - [ - ["function", "%nrquote"], - ["punctuation", "("], - ["string", "%' %\""], - ["punctuation", ")"] - ] - ], - ["punctuation", ";"], - ["macro-keyword", "%let"], - " d", - ["operator", "="], - ["macro-string-functions", - [ - ["function", "%nrstr"], - ["punctuation", "("], - ["string", "%' %\""], - ["punctuation", ")"] - ] - ], - ["punctuation", ";"], - ["macro-keyword", "%let"], - " e", - ["operator", "="], - ["macro-string-functions", - [ - ["function", "%quote"], - ["punctuation", "("], - ["string", "%' %\""], - ["punctuation", ")"] - ] - ], - ["punctuation", ";"], - ["macro-keyword", "%let"], - " f", - ["operator", "="], - ["macro-string-functions", - [ - ["function", "%str"], - ["punctuation", "("], - ["string", "%' %\""], - ["punctuation", ")"] - ] - ], - ["punctuation", ";" - ] -] - ----------------------------------------------------- - -Checks for all macro string functions. +%let a=%bquote(' "); +%let b=%nrbquote(' "); +%let c=%nrquote(%' %"); +%let d=%nrstr(%' %"); +%let e=%quote(%' %"); +%let f=%str(%' %"); +%let char1 = %bquote(%substr(&infile,1,1)); + +---------------------------------------------------- + +[ + ["macro-keyword", "%let"], + " a", + ["operator", "="], + ["macro-string-functions", [ + ["function", "%bquote"], + ["punctuation", "("], + "' \"", + ["punctuation", ")"] + ]], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " b", + ["operator", "="], + ["macro-string-functions", [ + ["function", "%nrbquote"], + ["punctuation", "("], + "' \"", + ["punctuation", ")"] + ]], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " c", + ["operator", "="], + ["macro-string-functions", [ + ["function", "%nrquote"], + ["punctuation", "("], + ["escaped-char", "%'"], + ["escaped-char", "%\""], + ["punctuation", ")"] + ]], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " d", + ["operator", "="], + ["macro-string-functions", [ + ["function", "%nrstr"], + ["punctuation", "("], + ["escaped-char", "%'"], + ["escaped-char", "%\""], + ["punctuation", ")"] + ]], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " e", + ["operator", "="], + ["macro-string-functions", [ + ["function", "%quote"], + ["punctuation", "("], + ["escaped-char", "%'"], + ["escaped-char", "%\""], + ["punctuation", ")"] + ]], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " f", + ["operator", "="], + ["macro-string-functions", [ + ["function", "%str"], + ["punctuation", "("], + ["escaped-char", "%'"], + ["escaped-char", "%\""], + ["punctuation", ")"] + ]], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " char1 ", + ["operator", "="], + ["function", "%bquote"], + ["punctuation", "("], + ["macro-keyword", "%substr"], + ["punctuation", "("], + ["macro-variable", "&infile"], + ["punctuation", ","], + ["number", "1"], + ["punctuation", ","], + ["number", "1"], + ["punctuation", ")"], + ["punctuation", ")"], + ["punctuation", ";"] +] + +---------------------------------------------------- + +Checks for all macro string functions. diff --git a/tests/languages/sas/macrodefinition_feature.test b/tests/languages/sas/macrodefinition_feature.test index 5d0d6c1686..d846a05b07 100644 --- a/tests/languages/sas/macrodefinition_feature.test +++ b/tests/languages/sas/macrodefinition_feature.test @@ -19,113 +19,93 @@ ---------------------------------------------------- [ - [ - "macro-declaration", - [ - ["keyword", "%macro"], - " prnt(var,sum)" - ] - ], - ["punctuation", ";"], - ["step", "proc print"], - ["keyword", "data"], - ["operator", "="], - "srhigh", - ["punctuation", ";"], - ["keyword", "var"], - ["operator", "&"], - "var", - ["punctuation", ";"], - ["keyword", "sum"], - ["operator", "&"], - "sum", - ["punctuation", ";"], - ["step", "run"], - ["punctuation", ";"], - [ - "macro-end", - [ - ["keyword", "%mend"], - " prnt" - ] - ], - ["punctuation", ";"], - [ - "macro-declaration", - [ - ["keyword", "%macro"], - " printz/parmbuff" - ] - ], - ["punctuation", ";"], - ["macro-keyword", "%let"], - " num", - ["operator", "="], - ["number", "1"], - ["punctuation", ";"], - ["macro-keyword", "%let"], - " dsname", - ["operator", "="], - ["function", "%scan"], - ["punctuation", "("], - ["operator", "&"], - "syspbuff", - ["punctuation", ","], - ["operator", "&"], - "num", - ["punctuation", ")"], - ["punctuation", ";"], - ["macro-keyword", "%do"], - ["macro-keyword", "%while"], - ["punctuation", "("], - ["operator", "&"], - "dsname ", - ["operator-keyword", "ne"], - ["punctuation", ")"], - ["punctuation", ";"], - ["step", "proc print"], - ["keyword", "data"], - ["operator", "="], - ["operator", "&"], - "dsname", - ["punctuation", ";"], - ["step", "run"], - ["punctuation", ";"], - ["macro-keyword", "%let"], - " num", - ["operator", "="], - ["function", "%eval"], - ["punctuation", "("], - ["operator", "&"], - "num", - ["operator", "+"], - ["number", "1"], - ["punctuation", ")"], - ["punctuation", ";"], - ["macro-keyword", "%let"], - " dsname", - ["operator", "="], - ["function", "%scan"], - ["punctuation", "("], - ["operator", "&"], - "syspbuff", - ["punctuation", ","], - ["operator", "&"], - "num", - ["punctuation", ")"], - ["punctuation", ";"], - ["macro-keyword", "%end"], - ["punctuation", ";"], - [ - "macro-end", - [ - ["keyword", "%mend"], - " printz" - ] - ], - ["punctuation", ";"] + ["macro-declaration", [ + ["keyword", "%macro"], + " prnt(var,sum)" + ]], + ["punctuation", ";"], + ["step", "proc print"], + ["keyword", "data"], + ["operator", "="], + "srhigh", + ["punctuation", ";"], + ["keyword", "var"], + ["macro-variable", "&var"], + ["punctuation", ";"], + ["keyword", "sum"], + ["macro-variable", "&sum"], + ["punctuation", ";"], + ["step", "run"], + ["punctuation", ";"], + ["macro-end", [ + ["keyword", "%mend"], + " prnt" + ]], + ["punctuation", ";"], + + ["macro-declaration", [ + ["keyword", "%macro"], + " printz/parmbuff" + ]], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " num", + ["operator", "="], + ["number", "1"], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " dsname", + ["operator", "="], + ["macro-keyword", "%scan"], + ["punctuation", "("], + ["macro-variable", "&syspbuff"], + ["punctuation", ","], + ["macro-variable", "&num"], + ["punctuation", ")"], + ["punctuation", ";"], + ["macro-keyword", "%do"], + ["macro-keyword", "%while"], + ["punctuation", "("], + ["macro-variable", "&dsname"], + ["operator-keyword", "ne"], + ["punctuation", ")"], + ["punctuation", ";"], + ["step", "proc print"], + ["keyword", "data"], + ["operator", "="], + ["macro-variable", "&dsname"], + ["punctuation", ";"], + ["step", "run"], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " num", + ["operator", "="], + ["macro-keyword", "%eval"], + ["punctuation", "("], + ["macro-variable", "&num"], + ["operator", "+"], + ["number", "1"], + ["punctuation", ")"], + ["punctuation", ";"], + ["macro-keyword", "%let"], + " dsname", + ["operator", "="], + ["macro-keyword", "%scan"], + ["punctuation", "("], + ["macro-variable", "&syspbuff"], + ["punctuation", ","], + ["macro-variable", "&num"], + ["punctuation", ")"], + ["punctuation", ";"], + ["macro-keyword", "%end"], + ["punctuation", ";"], + ["macro-end", [ + ["keyword", "%mend"], + " printz" + ]], + ["punctuation", ";"] ] ---------------------------------------------------- -Checks that options captures "options" and correctly tags following text. +Check that macro definition correctly recognizes %macro and %mend.