<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>fileTypes</key> <array> <string>sas</string> </array> <key>foldingStartMarker</key> <string>(proc|data|%macro).*;$</string> <key>foldingStopMarker</key> <string>(run|quit|%mend);</string> <key>name</key> <string>SAS</string> <key>patterns</key> <array> <dict> <key>include</key> <string>#comments</string> </dict> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>support.function.sas</string> </dict> <key>2</key> <dict> <key>name</key> <string>entity.name.function.sas</string> </dict> </dict> <key>match</key> <string>(?i:(proc) (\w+))</string> </dict> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>support.function.sas</string> </dict> <key>2</key> <dict> <key>name</key> <string>constant.other.table-name.sas</string> </dict> </dict> <key>match</key> <string>(?i:^(data) ([^\s]+))</string> </dict> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>entity.other.attribute-name.sas</string> </dict> <key>2</key> <dict> <key>name</key> <string>constant.other.library-name.sas</string> </dict> <key>3</key> <dict> <key>name</key> <string>constant.other.table-name.sas</string> </dict> </dict> <key>match</key> <string>(?i:\b(data|out)=(\w+\.)?(\w*)\b)</string> </dict> <dict> <key>match</key> <string>(?i:\bsort|run|quit|output\b)</string> <key>name</key> <string>support.function.sas</string> </dict> <dict> <key>match</key> <string>\b\d+(\.\d+)*\b</string> <key>name</key> <string>constant.numeric.sas</string> </dict> <dict> <key>match</key> <string>\blow|high\b</string> <key>name</key> <string>constant.sas</string> </dict> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>keyword.other.sas</string> </dict> <key>2</key> <dict> <key>name</key> <string>variable.other.sas</string> </dict> </dict> <key>match</key> <string>(?i:\b(by) ([^\s]+)\b)</string> </dict> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>keyword.other.sas</string> </dict> <key>2</key> <dict> <key>name</key> <string>variable.other.sas</string> </dict> </dict> <key>match</key> <string>(?i:(keep|drop|retain|format|class|var) ([\w\s]+))</string> </dict> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>keyword.other.sas</string> </dict> <key>2</key> <dict> <key>name</key> <string>constant.other.table-name.sas</string> </dict> </dict> <key>match</key> <string>(?i:\b(set|tables|merge) ([\w\s]+)\b)</string> </dict> <dict> <key>match</key> <string>\b(if|else|then|end)\b</string> <key>name</key> <string>keyword.control.sas</string> </dict> <dict> <key>match</key> <string>(?i)\b(descending)\b</string> <key>name</key> <string>keyword.other.order.sas</string> </dict> <dict> <key>match</key> <string>(?i)\b(title)\b</string> <key>name</key> <string>keyword.other.sas</string> </dict> <dict> <key>match</key> <string>\*</string> <key>name</key> <string>keyword.operator.star.sas</string> </dict> <dict> <key>match</key> <string>\b<|>|eq|ne\b</string> <key>name</key> <string>keyword.operator.comparison.sas</string> </dict> <dict> <key>match</key> <string> \. </string> <key>name</key> <string>keyword.null.sas</string> </dict> <dict> <key>match</key> <string>-|\+|/</string> <key>name</key> <string>keyword.operator.math.sas</string> </dict> <dict> <key>match</key> <string>(?i)\b(avg|sum)(?=\s*\()</string> <key>name</key> <string>support.function.aggregate.sas</string> </dict> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>constant.other.library-name.sas</string> </dict> <key>2</key> <dict> <key>name</key> <string>constant.other.table-name.sas</string> </dict> </dict> <key>match</key> <string>(\w+?)\.(\w+)</string> </dict> <dict> <key>begin</key> <string>proc sas;</string> <key>end</key> <string>quit;</string> <key>patterns</key> <array> <dict> <key>include</key> <string>source.sas</string> </dict> </array> </dict> <dict> <key>include</key> <string>#strings</string> </dict> <dict> <key>include</key> <string>#regexps</string> </dict> </array> <key>repository</key> <dict> <key>comments</key> <dict> <key>patterns</key> <array> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>punctuation.definition.comment.sas</string> </dict> </dict> <key>match</key> <string>^\s*(\*).*;\s*$\n?</string> <key>name</key> <string>comment.line.asterisk.sas</string> </dict> <dict> <key>begin</key> <string>/\*</string> <key>captures</key> <dict> <key>0</key> <dict> <key>name</key> <string>punctuation.definition.comment.sas</string> </dict> </dict> <key>end</key> <string>\*/</string> <key>name</key> <string>comment.block.c</string> </dict> </array> </dict> <key>string_escape</key> <dict> <key>match</key> <string>\\.</string> <key>name</key> <string>constant.character.escape.sas</string> </dict> <key>string_interpolation</key> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>punctuation.definition.string.end.sas</string> </dict> </dict> <key>match</key> <string>(#\{)([^\}]*)(\})</string> <key>name</key> <string>string.interpolated.sas</string> </dict> <key>strings</key> <dict> <key>patterns</key> <array> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>punctuation.definition.string.begin.sas</string> </dict> <key>3</key> <dict> <key>name</key> <string>punctuation.definition.string.end.sas</string> </dict> </dict> <key>comment</key> <string>this is faster than the next begin/end rule since sub-pattern will match till end-of-line and sas files tend to have very long lines.</string> <key>match</key> <string>(')[^'\\]*(')</string> <key>name</key> <string>string.quoted.single.sas</string> </dict> <dict> <key>begin</key> <string>'</string> <key>beginCaptures</key> <dict> <key>0</key> <dict> <key>name</key> <string>punctuation.definition.string.begin.sas</string> </dict> </dict> <key>end</key> <string>'</string> <key>endCaptures</key> <dict> <key>0</key> <dict> <key>name</key> <string>punctuation.definition.string.end.sas</string> </dict> </dict> <key>name</key> <string>string.quoted.single.sas</string> <key>patterns</key> <array> <dict> <key>include</key> <string>#string_escape</string> </dict> </array> </dict> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>punctuation.definition.string.begin.sas</string> </dict> <key>3</key> <dict> <key>name</key> <string>punctuation.definition.string.end.sas</string> </dict> </dict> <key>comment</key> <string>this is faster than the next begin/end rule since sub-pattern will match till end-of-line and sas files tend to have very long lines.</string> <key>match</key> <string>(`)[^`\\]*(`)</string> <key>name</key> <string>string.quoted.other.backtick.sas</string> </dict> <dict> <key>begin</key> <string>`</string> <key>beginCaptures</key> <dict> <key>0</key> <dict> <key>name</key> <string>punctuation.definition.string.begin.sas</string> </dict> </dict> <key>end</key> <string>`</string> <key>endCaptures</key> <dict> <key>0</key> <dict> <key>name</key> <string>punctuation.definition.string.end.sas</string> </dict> </dict> <key>name</key> <string>string.quoted.other.backtick.sas</string> <key>patterns</key> <array> <dict> <key>include</key> <string>#string_escape</string> </dict> </array> </dict> <dict> <key>captures</key> <dict> <key>1</key> <dict> <key>name</key> <string>punctuation.definition.string.begin.sas</string> </dict> <key>3</key> <dict> <key>name</key> <string>punctuation.definition.string.end.sas</string> </dict> </dict> <key>comment</key> <string>this is faster than the next begin/end rule since sub-pattern will match till end-of-line and sas files tend to have very long lines.</string> <key>match</key> <string>(")[^"#]*(")</string> <key>name</key> <string>string.quoted.double.sas</string> </dict> <dict> <key>begin</key> <string>"</string> <key>beginCaptures</key> <dict> <key>0</key> <dict> <key>name</key> <string>punctuation.definition.string.begin.sas</string> </dict> </dict> <key>end</key> <string>"</string> <key>endCaptures</key> <dict> <key>0</key> <dict> <key>name</key> <string>punctuation.definition.string.end.sas</string> </dict> </dict> <key>name</key> <string>string.quoted.double.sas</string> <key>patterns</key> <array> <dict> <key>include</key> <string>#string_interpolation</string> </dict> </array> </dict> <dict> <key>begin</key> <string>%\{</string> <key>beginCaptures</key> <dict> <key>0</key> <dict> <key>name</key> <string>punctuation.definition.string.begin.sas</string> </dict> </dict> <key>end</key> <string>\}</string> <key>endCaptures</key> <dict> <key>0</key> <dict> <key>name</key> <string>punctuation.definition.string.end.sas</string> </dict> </dict> <key>name</key> <string>string.other.quoted.brackets.sas</string> <key>patterns</key> <array> <dict> <key>include</key> <string>#string_interpolation</string> </dict> </array> </dict> </array> </dict> </dict> <key>scopeName</key> <string>source.sas</string> <key>uuid</key> <string>A4DB38EE-846C-407A-868A-13D6FA341EEC</string> </dict> </plist>