Skip to content

Commit

Permalink
SAS: Added support for embedded Groovy and Lua code (#2091)
Browse files Browse the repository at this point in the history
Like PROC SQL, PROC GROOVY and PROC LUA both contain syntax that should be treated as the language specified by the PROC, not SAS. This implements that highlighting.
  • Loading branch information
cedporter authored and RunDevelopment committed Oct 23, 2019
1 parent 68d1c47 commit 3640b3f
Show file tree
Hide file tree
Showing 10 changed files with 201 additions and 27 deletions.
2 changes: 1 addition & 1 deletion components.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion components.json
Original file line number Diff line number Diff line change
Expand Up @@ -851,7 +851,7 @@
},
"sas": {
"title": "SAS",
"require": "sql",
"peerDependencies": ["groovy", "lua", "sql"],
"owner": "Golmote"
},
"sass": {
Expand Down
46 changes: 45 additions & 1 deletion components/prism-sas.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@
alias: 'keyword'
};

var submitStatement = {
pattern: /(^|\s)(?:submit(?:\s+(?:load|parseonly|norun))?|endsubmit)\b/i,
lookbehind: true,
alias: 'keyword'
};

Prism.languages.sas = {
'datalines': {
pattern: /^(\s*)(?:(?:data)?lines|cards);[\s\S]+?^\s*;/im,
Expand Down Expand Up @@ -86,6 +92,44 @@
}
},

'proc-groovy': {
pattern: /(^proc\s+groovy(?:\s+[\w|=]+)?;)(?:\s*submit)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,
lookbehind: true,
inside: {
'groovy': {
pattern: RegExp(/(^[ \t]*submit(?:\s+(?:load|parseonly|norun))?)(?:<str>|[^"'])+?(?=endsubmit;)/.source.replace(/<str>/g, stringPattern), 'im'),
lookbehind: true,
alias: 'language-groovy',
inside: Prism.languages.groovy
},
'submit-statement': submitStatement,
'global-statements': globalStatements,
'number': number,
'numeric-constant': numericConstant,
'punctuation': punctuation,
'string': string
}
},

'proc-lua': {
pattern: /(^proc\s+lua(?:\s+[\w|=]+)?;)(?:\s*submit)[\s\S]+?(?=^(?:proc\s+\w+|quit|run|data);|(?![\s\S]))/im,
lookbehind: true,
inside: {
'lua': {
pattern: RegExp(/(^[ \t]*submit(?:\s+(?:load|parseonly|norun))?)(?:<str>|[^"'])+?(?=endsubmit;)/.source.replace(/<str>/g, stringPattern), 'im'),
lookbehind: true,
alias: 'language-lua',
inside: Prism.languages.lua
},
'submit-statement': submitStatement,
'global-statements': globalStatements,
'number': number,
'numeric-constant': numericConstant,
'punctuation': punctuation,
'string': string
}
},

'proc-args': {
pattern: RegExp(/(^proc\s+\w+\s+)(?!\s)(?:[^;"']|<str>)+;/.source.replace(/<str>/g, stringPattern), 'im'),
lookbehind: true,
Expand Down Expand Up @@ -167,7 +211,7 @@
'string': string,
'step': step,
'keyword': {
pattern: /((?:^|\s)=?)(?:action|after|analysis|and|array|barchart|barwidth|begingraph|by|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|data(?=\=)|define|document|do\s+over|do|dol|drop|dul|end|entryTitle|else|endcomp|fill(?:attrs)?|filename|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|legendlabel|length|libname|merge|midpoints|name|noobs|nowd|ods|options|or|out(?:put)?|overlay|plot|ranexp|rannor|rbreak|retain|set|session|sessref|statgraph|sum|summarize|table|temp|then\s+do|then|title\d?|to|var|where|xaxisopts|yaxisopts|y2axisopts)\b/i,
pattern: /((?:^|\s)=?)(?:action|after|analysis|and|array|barchart|barwidth|begingraph|by|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|data(?=\=)|define|document|do\s+over|do|dol|drop|dul|end|entryTitle|else|endcomp|eval(?:uate)?|exec(?:ute)?|fill(?:attrs)?|filename|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|legendlabel|length|libname|merge|midpoints|name|noobs|nowd|ods|options|or|out(?:put)?|overlay|plot|ranexp|rannor|rbreak|retain|set|session|sessref|statgraph|sum|summarize|table|temp|then\s+do|then|title\d?|to|var|where|xaxisopts|yaxisopts|y2axisopts)\b/i,
lookbehind: true,
},
// In SAS Studio syntax highlighting, these operators are styled like keywords
Expand Down
2 changes: 1 addition & 1 deletion components/prism-sas.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion plugins/autoloader/prism-autoloader.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@
],
"reason": "clike",
"ruby": "clike",
"sas": "sql",
"sass": "css",
"scss": "css",
"scala": "java",
Expand Down
2 changes: 1 addition & 1 deletion plugins/autoloader/prism-autoloader.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 3640b3f

Please sign in to comment.