diff options
Diffstat (limited to 'pygments/lexers/sas.py')
-rw-r--r-- | pygments/lexers/sas.py | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/pygments/lexers/sas.py b/pygments/lexers/sas.py index b7f4eb54..3747ed9a 100644 --- a/pygments/lexers/sas.py +++ b/pygments/lexers/sas.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- - """ pygments.lexers.sas ~~~~~~~~~~~~~~~~~~~ Lexer for SAS. + + :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. """ import re @@ -14,15 +16,17 @@ from pygments.token import Comment, Keyword, Name, Number, String, Text, \ __all__ = ['SASLexer'] + class SASLexer(RegexLexer): """ - For `SAS <http://www.sas.com/>` files. + For `SAS <http://www.sas.com/>`_ files. - Syntax from syntax/sas.vim by James Kidd <james.kidd@covance.com> + .. versionadded:: 2.2 """ + # Syntax from syntax/sas.vim by James Kidd <james.kidd@covance.com> name = 'SAS' - aliases = ['SAS', 'sas'] + aliases = ['sas'] filenames = ['*.SAS', '*.sas'] mimetypes = ['text/x-sas', 'text/sas', 'application/x-sas'] flags = re.IGNORECASE | re.MULTILINE @@ -31,8 +35,8 @@ class SASLexer(RegexLexer): "bquote", "nrbquote", "cmpres", "qcmpres", "compstor", "datatyp", "display", "do", "else", "end", "eval", "global", "goto", "if", "index", "input", "keydef", "label", "left", "length", "let", - "local", "lowcase", "macro", "mend", "nrbquote", "nrquote", - "nrstr", "put", "qcmpres", "qleft", "qlowcase", "qscan", + "local", "lowcase", "macro", "mend", "nrquote", + "nrstr", "put", "qleft", "qlowcase", "qscan", "qsubstr", "qsysfunc", "qtrim", "quote", "qupcase", "scan", "str", "substr", "superq", "syscall", "sysevalf", "sysexec", "sysfunc", "sysget", "syslput", "sysprod", "sysrc", "sysrput", @@ -73,8 +77,8 @@ class SASLexer(RegexLexer): "compress", "cos", "cosh", "css", "curobs", "cv", "daccdb", "daccdbsl", "daccsl", "daccsyd", "dacctab", "dairy", "date", "datejul", "datepart", "datetime", "day", "dclose", "depdb", - "depdbsl", "depdbsl", "depsl", "depsl", "depsyd", "depsyd", - "deptab", "deptab", "dequote", "dhms", "dif", "digamma", + "depdbsl", "depsl", "depsyd", + "deptab", "dequote", "dhms", "dif", "digamma", "dim", "dinfo", "dnum", "dopen", "doptname", "doptnum", "dread", "dropnote", "dsname", "erf", "erfc", "exist", "exp", "fappend", "fclose", "fcol", "fdelete", "fetch", "fetchobs", @@ -133,7 +137,7 @@ class SASLexer(RegexLexer): ], # Special highlight for proc, data, quit, run 'proc-data': [ - (r'(^|;)\s*(proc [a-zA-Z0-9_]+|data|run|quit)[\s;\n]', + (r'(^|;)\s*(proc \w+|data|run|quit)[\s;]', Keyword.Reserved), ], # Special highlight cards and datalines @@ -151,7 +155,6 @@ class SASLexer(RegexLexer): (r'NOTE(:|-).*', Generic, '#pop'), (r'WARNING(:|-).*', Generic.Emph, '#pop'), (r'ERROR(:|-).*', Generic.Error, '#pop'), - (r'(?!(WARNING|NOTE|ERROR))+', Text, '#pop'), include('general'), ], 'general': [ @@ -185,8 +188,8 @@ class SASLexer(RegexLexer): ], # Strings and user-defined variables and macros (order matters) 'vars-strings': [ - (r'&[a-zA-Z_][a-zA-Z0-9_]{0,31}\.?', Name.Variable), - (r'%[a-zA-Z_][a-zA-Z0-9_]{0,31}', Name.Function), + (r'&[a-z_]\w{0,31}\.?', Name.Variable), + (r'%[a-z_]\w{0,31}', Name.Function), (r'\'', String, 'string_squote'), (r'"', String, 'string_dquote'), ], @@ -206,11 +209,11 @@ class SASLexer(RegexLexer): (r'[$"\\]', String), ], 'validvar': [ - (r'[a-zA-Z_][a-zA-Z0-9_]{0,31}\.?', Name.Variable, '#pop'), + (r'[a-z_]\w{0,31}\.?', Name.Variable, '#pop'), ], # SAS numbers and special variables 'numbers': [ - (r'\b[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+|\.)([eE][+-]?[0-9]+)?[i]?\b', + (r'\b[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+|\.)(E[+-]?[0-9]+)?i?\b', Number), ], 'special': [ |