├── LICENSE ├── README.md └── shbrushdax.js /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Marco Russo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SyntaxHighlighterBrushDax 2 | Custom SyntaxHighlighter brush for DAX. 3 | 4 | To use the DAX brush with SyntaxHighlighter WordPress plugin, add the following code to your functions.php: 5 | 6 | ```php 7 | /* 8 | * Tell WordPress to load the brush file with SyntaxHighlighter plugin 9 | * Replace YOUR_BRUSH_DIRECTORY_URI with the URL path that contains the brush js file 10 | * E.g.: get_template_directory_uri() .'/js/shbrushdax.js' 11 | */ 12 | function my_syntaxhighlighter_regscript() { 13 | wp_register_script( 'syntaxhighlighter-brush-dax', 'YOUR_BRUSH_DIRECTORY_URI/shbrushdax.js', array('syntaxhighlighter-core'), '1.0' ); 14 | } 15 | add_action( 'init', 'my_syntaxhighlighter_regscript' ); 16 | 17 | /* 18 | * Define a brush shortcode 19 | */ 20 | function my_syntaxhighlighter_addlang( $brushes ) { 21 | $brushes['dax'] = 'dax'; 22 | return $brushes; 23 | } 24 | add_filter( 'syntaxhighlighter_brushes', 'my_syntaxhighlighter_addlang' ); 25 | ``` 26 | Use the brush in your posts with the following syntax: 27 | 28 | ``` 29 | [dax]your code here[/dax] 30 | ``` 31 | 32 | For more information, [read this article by Alex Mills](https://alex.blog/wordpress-plugins/syntaxhighlighter/adding-a-new-brush-language/). 33 | -------------------------------------------------------------------------------- /shbrushdax.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SQLBI - info@sqlbi.com 3 | * https://www.sqlbi.com 4 | */ 5 | 6 | SyntaxHighlighter.brushes.DAX = function() { 7 | const funcs = 'INFO.GENERALSEGMENTMAPSEGMENTMETADATASTORAGES INFO.ATTRIBUTEHIERARCHYSTORAGES INFO.DELTATABLEMETADATASTORAGES INFO.STORAGETABLECOLUMNSEGMENTS INFO.RELATIONSHIPINDEXSTORAGES INFO.COLUMNPARTITIONSTORAGES INFO.DATACOVERAGEDEFINITIONS INFO.FORMATSTRINGDEFINITIONS SAMPLECARTESIANPOINTSBYCOVER INFO.ALTERNATEOFDEFINITIONS INFO.PERSPECTIVEHIERARCHIES SELECTEDMEASUREFORMATSTRING INFO.DETAILROWSDEFINITIONS INFO.ATTRIBUTEHIERARCHIES INFO.RELATEDCOLUMNDETAILS INFO.RELATIONSHIPSTORAGES SAMPLEAXISWITHLOCALMINMAX APPROXIMATEDISTINCTCOUNT INFO.PARQUETFILESTORAGES INFO.PERSPECTIVEMEASURES INFO.STORAGETABLECOLUMNS INFO.DICTIONARYSTORAGES INFO.EXTENDEDPROPERTIES INFO.LINGUISTICMETADATA INFO.OBJECTTRANSLATIONS INFO.PERSPECTIVECOLUMNS INFO.SEGMENTMAPSTORAGES INFO.CALCULATIONGROUPS INFO.CHANGEDPROPERTIES INFO.COLUMNPERMISSIONS INFO.EXCLUDEDARTIFACTS INFO.HIERARCHYSTORAGES INFO.PARTITIONSTORAGES INFO.PERSPECTIVETABLES CLOSINGBALANCEQUARTER INFO.CALCULATIONITEMS INFO.TABLEPERMISSIONS OPENINGBALANCEQUARTER DISTINCTCOUNTNOBLANK INFO.REFRESHPOLICIES INFO.ROLEMEMBERSHIPS INFO.SEGMENTSTORAGES NATURALLEFTOUTERJOIN CLOSINGBALANCEMONTH CONTAINSSTRINGEXACT INFO.CALCDEPENDENCY INFO.COLUMNSTORAGES INFO.GROUPBYCOLUMNS INFO.STORAGEFOLDERS OPENINGBALANCEMONTH ROLLUPADDISSUBTOTAL SELECTEDMEASURENAME SUBSTITUTEWITHINDEX CLOSINGBALANCEYEAR FIRSTNONBLANKVALUE INFO.RELATIONSHIPS INFO.STORAGETABLES INFO.TABLESTORAGES OPENINGBALANCEYEAR SAMEPERIODLASTYEAR INFO.PERSPECTIVES INFO.STORAGEFILES ISSELECTEDMEASURE LASTNONBLANKVALUE USERPRINCIPALNAME ALLCROSSFILTERED COLUMNSTATISTICS INFO.ANNOTATIONS INFO.DATASOURCES INFO.EXPRESSIONS INFO.HIERARCHIES INFO.QUERYGROUPS NATURALINNERJOIN ROLLUPISSUBTOTAL SUMMARIZECOLUMNS ADDMISSINGITEMS CONFIDENCE.NORM EXTERNALMEASURE INFO.PARTITIONS INFO.PROPERTIES INFO.VARIATIONS ISCROSSFILTERED PATHITEMREVERSE PERCENTILEX.EXC PERCENTILEX.INC PREVIOUSQUARTER SELECTEDMEASURE USERELATIONSHIP CALCULATETABLE CONTAINSSTRING EVALUATEANDLOG GENERATESERIES INFO.FUNCTIONS PARALLELPERIOD PERCENTILE.EXC PERCENTILE.INC STARTOFQUARTER ALLNOBLANKROW CHISQ.DIST.RT COMBINEVALUES DATESINPERIOD DISTINCTCOUNT FIRSTNONBLANK INFO.CATALOGS INFO.CULTURES INFO.MEASURES MOVINGAVERAGE PREVIOUSMONTH REMOVEFILTERS SELECTCOLUMNS SELECTEDVALUE CALENDARAUTO CHISQ.INV.RT CONCATENATEX CONFIDENCE.T CURRENTGROUP DATESBETWEEN ENDOFQUARTER HASONEFILTER INFO.COLUMNS KEYWORDMATCH LASTNONBLANK PATHCONTAINS POISSON.DIST PREVIOUSYEAR RELATEDTABLE STARTOFMONTH TOPNPERLEVEL USEROBJECTID ALLSELECTED COLLAPSEALL CONCATENATE CONTAINSROW CROSSFILTER GENERATEALL HASONEVALUE INFO.LEVELS INFO.TABLES ISO.CEILING ISONORAFTER KEEPFILTERS LOOKUPVALUE NETWORKDAYS NEXTQUARTER NORM.S.DIST PARTITIONBY PREVIOUSDAY RANDBETWEEN ROLLUPGROUP STARTOFYEAR USERCULTURE ADDCOLUMNS CHISQ.DIST COUNTBLANK COUPDAYSNC CUSTOMDATA DETAILROWS ENDOFMONTH EXPON.DIST INFO.MODEL INFO.ROLES ISFILTERED ISSUBTOTAL NORM.S.INV PATHLENGTH RUNNINGSUM SUBSTITUTE TBILLPRICE TBILLYIELD ALLEXCEPT AMORDEGRC BETA.DIST BITLSHIFT BITRSHIFT CALCULATE CHISQ.INV COUNTROWS COUPDAYBS CROSSJOIN DATATABLE DATEVALUE ENDOFYEAR EXPANDALL FIRSTDATE INFO.KPIS INTERSECT ISATLEVEL ISINSCOPE ISLOGICAL ISNONTEXT MDURATION NEXTMONTH NONVISUAL NORM.DIST ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD PDURATION PRICEDISC ROUNDDOWN ROWNUMBER SUMMARIZE T.DIST.2T T.DIST.RT TIMEVALUE YIELDDISC ACCRINTM AMORLINC AVERAGEA AVERAGEX BETA.INV CALENDAR COALESCE COLLAPSE CONTAINS COUPDAYS CUMPRINC CURRENCY DATEDIFF DATESMTD DATESQTD DATESYTD DISTINCT DOLLARDE DOLLARFR DURATION EARLIEST GENERATE GEOMEANX IF.EAGER ISNUMBER LASTDATE NEXTYEAR NORM.INV PATHITEM PREVIOUS PRICEMAT PRODUCTX QUOTIENT RECEIVED STDEVX.P STDEVX.S T.INV.2T TOPNSKIP TOTALMTD TOTALQTD TOTALYTD USERNAME UTCTODAY YEARFRAC YIELDMAT ACCRINT AVERAGE CEILING COMBINA CONVERT COUNTAX COUPNCD COUPNUM COUPPCD CUMIPMT DATEADD DEGREES EARLIER EOMONTH FILTERS GEOMEAN GROUPBY IFERROR INTRATE ISAFTER ISBLANK ISEMPTY ISERROR LINESTX MATCHBY MEDIANX NEXTDAY NOMINAL ORDERBY PRODUCT QUARTER RADIANS RANK.EQ RELATED REPLACE ROUNDUP STDEV.P STDEV.S TBILLEQ TREATAS UNICHAR UNICODE WEEKDAY WEEKNUM BITAND BITXOR COMBIN COUNTA COUNTX DIVIDE EFFECT EXCEPT EXPAND FILTER FORMAT IGNORE ISEVEN ISTEXT LINEST LOOKUP MEDIAN MINUTE MROUND NAMEOF OFFSET PERMUT ROLLUP SAMPLE SEARCH SECOND SQRTPI SWITCH T.DIST TOJSON UTCNOW VALUES VARX.P VARX.S WINDOW ACOSH ACOTH ASINH ATANH BITOR BLANK COUNT EDATE ERROR EXACT FALSE FIRST FIXED FLOOR INDEX ISODD ISPMT LOG10 LOWER MONTH POWER PRICE RANGE RANKX RIGHT ROUND T.INV TOCSV TODAY TRUNC UNION UPPER VALUE VAR.P VAR.S YIELD ACOS ACOT ASIN ATAN COSH COTH DATE DISC EVEN FACT FIND HASH HOUR IPMT LAST LEFT MAXA MAXX MINA MINX NEXT NPER PATH PPMT RAND RANK RATE REPT SIGN SINH SQRT SUMX TANH TIME TOPN TRIM TRUE XIRR XNPV YEAR ABS ALL AND COS COT DAY DDB EXP GCD INT LCM LEN LOG MAX MID MIN MOD NOT NOW ODD PMT ROW RRI SIN SLN SUM SYD TAN VDB DB FV IF LN OR PI PV'; 8 | 9 | this.regexList = [ 10 | { regex: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/).*)/gm, css: 'comments' }, 11 | { regex: /"(?:[^"]|"")*"(?!")/gm, css: 'string' }, 12 | { regex: /'(?:[^']|'')*'(?!')(?:\[[ \w\xA0-\uFFFF]+\])?|\w+\[[ \w\xA0-\uFFFF]+\]/gm, css: 'columns' }, 13 | { regex: /\[[ \w\xA0-\uFFFF]+\]/gm, css: 'measures' }, 14 | { regex: new RegExp(this.getKeywords(funcs), 'gm'), css: 'functions' }, 15 | { regex: /\b(?:AXIS|ROWS|COLUMN|DEFINE|DENSIFY|EVALUATE|GROUP|MEASURE|MPARAMETER|ORDER BY|RETURN|START AT|TABLE|TOTAL|VAR|WITH VISUAL SHAPE)\b/gm, css: 'keyword' }, 16 | { regex: /:=|[-+*\/=^]|\b(?:IN|NOT)\b/i, css: 'operator' }, 17 | { regex: /\b\d+\.?\d*|\B\.\d+\b/i, css: 'number' }, 18 | { regex: /[\[\](){}`,.]/gm, css: 'parenthesis' } 19 | ]; 20 | }; 21 | 22 | SyntaxHighlighter.brushes.DAX.prototype = new SyntaxHighlighter.Highlighter(); 23 | SyntaxHighlighter.brushes.DAX.aliases = ['dax']; --------------------------------------------------------------------------------