diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py index d2d7880f3f..ccc1b84d70 100644 --- a/pygments/lexers/_mapping.py +++ b/pygments/lexers/_mapping.py @@ -121,6 +121,7 @@ 'DarcsPatchLexer': ('pygments.lexers.diff', 'Darcs Patch', ('dpatch',), ('*.dpatch', '*.darcspatch'), ()), 'DartLexer': ('pygments.lexers.javascript', 'Dart', ('dart',), ('*.dart',), ('text/x-dart',)), 'Dasm16Lexer': ('pygments.lexers.asm', 'DASM16', ('dasm16',), ('*.dasm16', '*.dasm'), ('text/x-dasm16',)), + 'DaxLexer': ('pygments.lexers.dax', 'Dax', ('dax',), ('*.dax',), ()), 'DebianControlLexer': ('pygments.lexers.installers', 'Debian Control file', ('debcontrol', 'control'), ('control',), ()), 'DelphiLexer': ('pygments.lexers.pascal', 'Delphi', ('delphi', 'pas', 'pascal', 'objectpascal'), ('*.pas', '*.dpr'), ('text/x-pascal',)), 'DevicetreeLexer': ('pygments.lexers.devicetree', 'Devicetree', ('devicetree', 'dts'), ('*.dts', '*.dtsi'), ('text/x-c',)), diff --git a/pygments/lexers/dax.py b/pygments/lexers/dax.py new file mode 100644 index 0000000000..34b20d355c --- /dev/null +++ b/pygments/lexers/dax.py @@ -0,0 +1,113 @@ +""" + pygments.lexers.dax + ~~~~~~~~~~~~~~~~~~~ + + Lexer for LilyPond. + + :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from pygments.lexer import RegexLexer, words +from pygments.token import Comment, Punctuation, Whitespace,\ + Name, Operator, String, Number, Text + +__all__ = ['DaxLexer'] + +class DaxLexer(RegexLexer): + """ + Lexer for Power BI DAX + Referenced from: https://github.com/sql-bi/SyntaxHighlighterBrushDax + + """ + name = 'Dax' + aliases = ['dax'] + filenames = ['*.dax'] + url = 'https://learn.microsoft.com/en-us/dax/dax-function-reference' + mimetypes = [] + + tokens = { + 'root': [ + (r'\s+', Whitespace), + (r"--.*\n?", Comment.Single), # Comment: Double dash comment + (r"//.*\n?", Comment.Single), # Comment: Double backslash comment + (r'/\*', Comment.Multiline, 'multiline-comments'), + (words(('abs','acos','acosh','acot','acoth','addcolumns','addmissingitems','all', + 'allcrossfiltered','allexcept','allnoblankrow','allselected','and', + 'approximatedistinctcount','asin','asinh','atan','atanh','average', + 'averagea','averagex','beta.dist','beta.inv','blank','calculate', + 'calculatetable','calendar','calendarauto','ceiling','chisq.dist', + 'chisq.dist.rt','chisq.inv','chisq.inv.rt','closingbalancemonth', + 'closingbalancequarter','closingbalanceyear','coalesce','combin', + 'combina','combinevalues','concatenate','concatenatex','confidence.norm', + 'confidence.t','contains','containsrow','containsstring','containsstringexact', + 'convert','cos','cosh','cot','coth','count','counta','countax','countblank', + 'countrows','countx','crossfilter','crossjoin','currency','currentgroup', + 'customdata','datatable','date','dateadd','datediff','datesbetween', + 'datesinperiod','datesmtd','datesqtd','datesytd','datevalue','day','degrees', + 'detailrows','distinct','distinctcount','distinctcountnoblank','divide', + 'earlier','earliest','edate','endofmonth','endofquarter','endofyear', + 'eomonth','error','even','exact','except','exp','expon.dist','fact', + 'false','filter','filters','find','firstdate','firstnonblank','firstnonblankvalue', + 'fixed','floor','format','gcd','generate','generateall','generateseries','geomean', + 'geomeanx','groupby','hasonefilter','hasonevalue','hour','if','if.eager','iferror', + 'ignore','int','intersect','isblank','iscrossfiltered','isempty','iserror','iseven', + 'isfiltered','isinscope','islogical','isnontext','isnumber','iso.ceiling','isodd', + 'isonorafter','isselectedmeasure','issubtotal','istext','keepfilters', + 'keywordmatch','lastdate','lastnonblank','lastnonblankvalue','lcm','left', + 'len','ln','log','log10','lookupvalue','lower','max','maxa','maxx', + 'median','medianx','mid','min','mina','minute','minx','mod','month', + 'mround','naturalinnerjoin','naturalleftouterjoin', + 'nextday','nextmonth','nextquarter','nextyear','nonvisual','norm.dist','norm.inv', + 'norm.s.dist','norm.s.inv','not','now','odd','openingbalancemonth', + 'openingbalancequarter','openingbalanceyear','or','parallelperiod', + 'path','pathcontains','pathitem','pathitemreverse','pathlength','percentile.exc', + 'percentile.inc','percentilex.exc','percentilex.inc','permut','pi', + 'poisson.dist','power','previousday','previousmonth','previousquarter', + 'previousyear','product','productx','quarter','quotient','radians', + 'rand','randbetween','rank.eq','rankx','related','relatedtable','removefilters', + 'replace','rept','right','rollup','rollupaddissubtotal','rollupgroup', + 'rollupissubtotal','round','rounddown','roundup','row','sameperiodlastyear', + 'sample','search','second','selectcolumns','selectedmeasure', + 'selectedmeasureformatstring','selectedmeasurename','selectedvalue', + 'sign','sin','sinh','sqrt','sqrtpi','startofmonth','startofquarter', + 'startofyear','stdev.p','stdev.s''stdevx.p','stdevx.s','substitute', + 'substitutewithindex','sum','summarize','summarizecolumns','sumx', + 'switch','t.dist','t.dist.2t','t.dist.rt','t.inv','t.inv.2t','tan', + 'tanh','time','timevalue','today','topn','topnskip','totalmtd', + 'totalqtd','totalytd','treatas','trim','true','trunc','unichar','unicode', + 'union','upper','userelationship','username','userobjectid','userprincipalname', + 'utcnow','utctoday','value','values','var.p','var.s','varx.p','varx.s', + 'weekday','weeknum','xirr','xnpv','year','yearfrac'), + prefix=r'(?i)', suffix=r'\b'), Name.Function), #Functions + + (words(('at','asc','boolean','both','by','create','currency', + 'datetime','day','define','desc','double', + 'evaluate','false','integer','measure', + 'month','none','order','return','single','start','string', + 'table','true','var','year'), + prefix=r'(?i)', suffix=r'\b'), Name.Builtin), # Keyword + + (r':=|[-+*\/=^]', Operator), + (r'\b(IN|NOT)\b', Operator.Word), + (r'"', String, 'string'), #StringLiteral + (r"'(?:[^']|'')*'(?!')(?:\[[ \w]+\])?|\w+\[[ \w]+\]", + Name.Attribute), # Column reference + (r"\[[ \w]+\]", Name.Attribute), #Measure reference + (r'(?