sas top-level property

Language sas
final

Implementation

final sas = Language(
  id: "sas",
  refs: {},
  name: "SAS",
  case_insensitive: true,
  keywords: {
    "literal": [
      "null",
      "missing",
      "_all_",
      "_automatic_",
      "_character_",
      "_infile_",
      "_n_",
      "_name_",
      "_null_",
      "_numeric_",
      "_user_",
      "_webout_"
    ],
    "keyword": [
      "do",
      "if",
      "then",
      "else",
      "end",
      "until",
      "while",
      "abort",
      "array",
      "attrib",
      "by",
      "call",
      "cards",
      "cards4",
      "catname",
      "continue",
      "datalines",
      "datalines4",
      "delete",
      "delim",
      "delimiter",
      "display",
      "dm",
      "drop",
      "endsas",
      "error",
      "file",
      "filename",
      "footnote",
      "format",
      "goto",
      "in",
      "infile",
      "informat",
      "input",
      "keep",
      "label",
      "leave",
      "length",
      "libname",
      "link",
      "list",
      "lostcard",
      "merge",
      "missing",
      "modify",
      "options",
      "output",
      "out",
      "page",
      "put",
      "redirect",
      "remove",
      "rename",
      "replace",
      "retain",
      "return",
      "select",
      "set",
      "skip",
      "startsas",
      "stop",
      "title",
      "update",
      "waitsas",
      "where",
      "window",
      "x|0",
      "systask",
      "add",
      "and",
      "alter",
      "as",
      "cascade",
      "check",
      "create",
      "delete",
      "describe",
      "distinct",
      "drop",
      "foreign",
      "from",
      "group",
      "having",
      "index",
      "insert",
      "into",
      "in",
      "key",
      "like",
      "message",
      "modify",
      "msgtype",
      "not",
      "null",
      "on",
      "or",
      "order",
      "primary",
      "references",
      "reset",
      "restrict",
      "select",
      "set",
      "table",
      "unique",
      "update",
      "validate",
      "view",
      "where"
    ]
  },
  contains: [
    Mode(
      className: "keyword",
      begin: "^\\s*(proc [\\w\\d_]+|data|run|quit)[\\s;]",
    ),
    Mode(
      className: "variable",
      begin: "&[a-zA-Z_&][a-zA-Z0-9_]*\\.?",
    ),
    Mode(
      begin: ["^\\s*", "datalines;|cards;", "(?:.*\\n)+", "^\\s*;\\s*\$"],
      className: {"2": "keyword", "3": "string"},
    ),
    Mode(
      begin: ["%mend|%macro", "\\s+", "[a-zA-Z_&][a-zA-Z0-9_]*"],
      className: {"1": "built_in", "3": "title.function"},
    ),
    Mode(
      className: "built_in",
      begin:
          "%(?: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|qsubstr|qsysfunc|qtrim|quote|qupcase|scan|str|substr|superq|syscall|sysevalf|sysexec|sysfunc|sysget|syslput|sysprod|sysrc|sysrput|then|to|trim|unquote|until|upcase|verify|while|window)",
    ),
    Mode(
      className: "title.function",
      begin: "%[a-zA-Z_][a-zA-Z_0-9]*",
    ),
    Mode(
      className: "meta",
      begin:
          "(?:abs|addr|airy|arcos|arsin|atan|attrc|attrn|band|betainv|blshift|bnot|bor|brshift|bxor|byte|cdf|ceil|cexist|cinv|close|cnonct|collate|compbl|compound|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|dim|dinfo|dnum|dopen|doptname|doptnum|dread|dropnote|dsname|erf|erfc|exist|exp|fappend|fclose|fcol|fdelete|fetch|fetchobs|fexist|fget|fileexist|filename|fileref|finfo|finv|fipname|fipnamel|fipstate|floor|fnonct|fnote|fopen|foptname|foptnum|fpoint|fpos|fput|fread|frewind|frlen|fsep|fuzz|fwrite|gaminv|gamma|getoption|getvarc|getvarn|hbound|hms|hosthelp|hour|ibessel|index|indexc|indexw|input|inputc|inputn|int|intck|intnx|intrr|irr|jbessel|juldate|kurtosis|lag|lbound|left|length|lgamma|libname|libref|log|log10|log2|logpdf|logpmf|logsdf|lowcase|max|mdy|mean|min|minute|mod|month|mopen|mort|n|netpv|nmiss|normal|note|npv|open|ordinal|pathname|pdf|peek|peekc|pmf|point|poisson|poke|probbeta|probbnml|probchi|probf|probgam|probhypr|probit|probnegb|probnorm|probt|put|putc|putn|qtr|quote|ranbin|rancau|ranexp|rangam|range|rank|rannor|ranpoi|rantbl|rantri|ranuni|repeat|resolve|reverse|rewind|right|round|saving|scan|sdf|second|sign|sin|sinh|skewness|soundex|spedis|sqrt|std|stderr|stfips|stname|stnamel|substr|sum|symget|sysget|sysmsg|sysprod|sysrc|system|tan|tanh|time|timepart|tinv|tnonct|today|translate|tranwrd|trigamma|trim|trimn|trunc|uniform|upcase|uss|var|varfmt|varinfmt|varlabel|varlen|varname|varnum|varray|varrayx|vartype|verify|vformat|vformatd|vformatdx|vformatn|vformatnx|vformatw|vformatwx|vformatx|vinarray|vinarrayx|vinformat|vinformatd|vinformatdx|vinformatn|vinformatnx|vinformatw|vinformatwx|vinformatx|vlabel|vlabelx|vlength|vlengthx|vname|vnamex|vtype|vtypex|weekday|year|yyq|zipfips|zipname|zipnamel|zipstate)(?=\\()",
    ),
    Mode(
      className: "string",
      variants: [
        APOS_STRING_MODE,
        QUOTE_STRING_MODE,
      ],
    ),
    Mode(
      scope: "comment",
      begin: "\\*",
      end: ";",
      contains: [
        Mode(
          scope: "doctag",
          begin: "[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
          end: "(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",
          excludeBegin: true,
          relevance: 0,
        ),
        Mode(
          begin:
              "[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",
        ),
      ],
    ),
    C_BLOCK_COMMENT_MODE,
  ],
);