Skip to content
This repository has been archived by the owner on Nov 5, 2021. It is now read-only.

Commit

Permalink
Merge pull request #19 from scottmcmaster/master
Browse files Browse the repository at this point in the history
MSDAX support
  • Loading branch information
alexdima authored Jun 8, 2017
2 parents b14815e + 345fa67 commit 2981d7b
Show file tree
Hide file tree
Showing 5 changed files with 553 additions and 0 deletions.
1 change: 1 addition & 0 deletions gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ gulp.task('release', ['clean-release','compile'], function() {
bundleOne('src/less'),
bundleOne('src/lua'),
bundleOne('src/markdown'),
bundleOne('src/msdax'),
bundleOne('src/objective-c'),
bundleOne('src/php'),
bundleOne('src/powershell'),
Expand Down
6 changes: 6 additions & 0 deletions src/monaco.contribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,12 @@ registerLanguage({
aliases: ['Markdown', 'markdown'],
module: './markdown'
});
registerLanguage({
id: 'msdax',
extensions: ['.dax', '.msdax'],
aliases: ['DAX', 'MSDAX'],
module: './msdax'
});
registerLanguage({
id: 'objective-c',
extensions: [ '.m' ],
Expand Down
175 changes: 175 additions & 0 deletions src/msdax.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

'use strict';

import IRichLanguageConfiguration = monaco.languages.LanguageConfiguration;
import ILanguage = monaco.languages.IMonarchLanguage;

export var conf:IRichLanguageConfiguration = {
comments: {
lineComment: '//',
blockComment: ['/*', '*/'],
},
brackets: [['[',']'],['(',')'],['{','}']],
autoClosingPairs: [
{ open: '"', close: '"', notIn: ['string', 'comment'] },
{ open: '\'', close: '\'', notIn: ['string', 'comment'] },
{ open: '[', close: ']', notIn: ['string', 'comment'] },
{ open: '(', close: ')', notIn: ['string', 'comment'] },
{ open: '{', close: '}', notIn: ['string', 'comment'] },
]
};

export var language = <ILanguage> {
defaultToken: '',
tokenPostfix: '.msdax',
ignoreCase: true,

brackets: [
{ open: '[', close: ']', token: 'delimiter.square' },
{ open: '{', close: '}', token: 'delimiter.brackets' },
{ open: '(', close: ')', token: 'delimiter.parenthesis' }
],

keywords: [
// Query keywords
'VAR',
'RETURN',
'NOT',
'EVALUATE',
'DATATABLE',
'ORDER',
'BY',
'START',
'AT',
'DEFINE',
'MEASURE',
'ASC',
'DESC',
'IN',
// Datatable types
'BOOLEAN',
'DOUBLE',
'INTEGER',
'DATETIME',
'CURRENCY',
'STRING'
],
functions: [
// Relational
'CLOSINGBALANCEMONTH', 'CLOSINGBALANCEQUARTER', 'CLOSINGBALANCEYEAR', 'DATEADD', 'DATESBETWEEN',
'DATESINPERIOD', 'DATESMTD', 'DATESQTD', 'DATESYTD', 'ENDOFMONTH',
'ENDOFQUARTER', 'ENDOFYEAR', 'FIRSTDATE', 'FIRSTNONBLANK', 'LASTDATE',
'LASTNONBLANK', 'NEXTDAY', 'NEXTMONTH', 'NEXTQUARTER', 'NEXTYEAR',
'OPENINGBALANCEMONTH', 'OPENINGBALANCEQUARTER', 'OPENINGBALANCEYEAR', 'PARALLELPERIOD', 'PREVIOUSDAY',
'PREVIOUSMONTH', 'PREVIOUSQUARTER', 'PREVIOUSYEAR', 'SAMEPERIODLASTYEAR', 'STARTOFMONTH',
'STARTOFQUARTER', 'STARTOFYEAR', 'TOTALMTD', 'TOTALQTD', 'TOTALYTD',
'ADDCOLUMNS', 'ADDMISSINGITEMS', 'ALL', 'ALLEXCEPT', 'ALLNOBLANKROW',
'ALLSELECTED', 'CALCULATE', 'CALCULATETABLE', 'CALENDAR', 'CALENDARAUTO',
'CROSSFILTER', 'CROSSJOIN', 'CURRENTGROUP', 'DATATABLE', 'DETAILROWS',
'DISTINCT', 'EARLIER', 'EARLIEST', 'EXCEPT', 'FILTER',
'FILTERS', 'GENERATE', 'GENERATEALL', 'GROUPBY', 'IGNORE',
'INTERSECT', 'ISONORAFTER', 'KEEPFILTERS', 'LOOKUPVALUE', 'NATURALINNERJOIN',
'NATURALLEFTOUTERJOIN', 'RELATED', 'RELATEDTABLE', 'ROLLUP', 'ROLLUPADDISSUBTOTAL',
'ROLLUPGROUP', 'ROLLUPISSUBTOTAL', 'ROW', 'SAMPLE', 'SELECTCOLUMNS',
'SUBSTITUTEWITHINDEX', 'SUMMARIZE', 'SUMMARIZECOLUMNS', 'TOPN', 'TREATAS',
'UNION', 'USERELATIONSHIP', 'VALUES', 'SUM', 'SUMX',
'PATH', 'PATHCONTAINS', 'PATHITEM', 'PATHITEMREVERSE', 'PATHLENGTH',
'AVERAGE', 'AVERAGEA', 'AVERAGEX', 'COUNT', 'COUNTA',
'COUNTAX', 'COUNTBLANK', 'COUNTROWS', 'COUNTX', 'DISTINCTCOUNT',
'DIVIDE', 'GEOMEAN', 'GEOMEANX', 'MAX', 'MAXA',
'MAXX', 'MEDIAN', 'MEDIANX', 'MIN', 'MINA',
'MINX', 'PERCENTILE.EXC', 'PERCENTILE.INC', 'PERCENTILEX.EXC', 'PERCENTILEX.INC',
'PRODUCT', 'PRODUCTX', 'RANK.EQ', 'RANKX', 'STDEV.P',
'STDEV.S', 'STDEVX.P', 'STDEVX.S', 'VAR.P', 'VAR.S',
'VARX.P', 'VARX.S', 'XIRR', 'XNPV',
// Scalar
'DATE', 'DATEDIFF', 'DATEVALUE', 'DAY', 'EDATE',
'EOMONTH', 'HOUR', 'MINUTE', 'MONTH', 'NOW',
'SECOND', 'TIME', 'TIMEVALUE', 'TODAY', 'WEEKDAY',
'WEEKNUM', 'YEAR', 'YEARFRAC', 'CONTAINS', 'CONTAINSROW',
'CUSTOMDATA', 'ERROR', 'HASONEFILTER', 'HASONEVALUE', 'ISBLANK',
'ISCROSSFILTERED', 'ISEMPTY', 'ISERROR', 'ISEVEN', 'ISFILTERED',
'ISLOGICAL', 'ISNONTEXT', 'ISNUMBER', 'ISODD', 'ISSUBTOTAL',
'ISTEXT', 'USERNAME', 'USERPRINCIPALNAME', 'AND', 'FALSE',
'IF', 'IFERROR', 'NOT', 'OR', 'SWITCH',
'TRUE', 'ABS', 'ACOS', 'ACOSH', 'ACOT',
'ACOTH', 'ASIN', 'ASINH', 'ATAN', 'ATANH',
'BETA.DIST', 'BETA.INV', 'CEILING', 'CHISQ.DIST', 'CHISQ.DIST.RT',
'CHISQ.INV', 'CHISQ.INV.RT', 'COMBIN', 'COMBINA', 'CONFIDENCE.NORM',
'CONFIDENCE.T', 'COS', 'COSH', 'COT', 'COTH',
'CURRENCY', 'DEGREES', 'EVEN', 'EXP', 'EXPON.DIST',
'FACT', 'FLOOR', 'GCD', 'INT', 'ISO.CEILING',
'LCM', 'LN', 'LOG', 'LOG10', 'MOD',
'MROUND', 'ODD', 'PERMUT', 'PI', 'POISSON.DIST',
'POWER', 'QUOTIENT', 'RADIANS', 'RAND', 'RANDBETWEEN',
'ROUND', 'ROUNDDOWN', 'ROUNDUP', 'SIGN', 'SIN',
'SINH', 'SQRT', 'SQRTPI', 'TAN', 'TANH',
'TRUNC', 'BLANK', 'CONCATENATE', 'CONCATENATEX', 'EXACT',
'FIND', 'FIXED', 'FORMAT', 'LEFT', 'LEN',
'LOWER', 'MID', 'REPLACE', 'REPT', 'RIGHT',
'SEARCH', 'SUBSTITUTE', 'TRIM', 'UNICHAR', 'UNICODE',
'UPPER', 'VALUE'
],
tokenizer: {
root: [
{ include: '@comments' },
{ include: '@whitespace' },
{ include: '@numbers' },
{ include: '@strings' },
{ include: '@complexIdentifiers' },
[/[;,.]/, 'delimiter'],
[/[({})]/, '@brackets'],
[/[a-z_][a-zA-Z0-9_]*/,
{ cases: { '@keywords': 'keyword'
, '@functions': 'keyword'
, '@default': 'identifier' }
}
],
[/[<>=!%&+\-*/|~^]/, 'operator'],
],
whitespace: [
[/\s+/, 'white']
],
comments: [
[/\/\/+.*/, 'comment'],
[/\/\*/, { token: 'comment.quote', next: '@comment' }]
],
comment: [
[/[^*/]+/, 'comment'],
[/\*\//, { token: 'comment.quote', next: '@pop' }],
[/./, 'comment']
],
numbers: [
[/0[xX][0-9a-fA-F]*/, 'number'],
[/[$][+-]*\d*(\.\d*)?/, 'number'],
[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/, 'number']
],
strings: [
[/N"/, { token: 'string', next: '@string' }],
[/"/, { token: 'string', next: '@string' }]
],
string: [
[/[^"]+/, 'string'],
[/""/, 'string'],
[/"/, { token: 'string', next: '@pop' }]
],
complexIdentifiers: [
[/\[/, { token: 'identifier.quote', next: '@bracketedIdentifier' }],
[/'/, { token: 'identifier.quote', next: '@quotedIdentifier' }]
],
bracketedIdentifier: [
[/[^\]]+/, 'identifier'],
[/]]/, 'identifier'],
[/]/, { token: 'identifier.quote', next: '@pop' }]
],
quotedIdentifier: [
[/[^']+/, 'identifier'],
[/''/, 'identifier'],
[/'/, { token: 'identifier.quote', next: '@pop' }]
]
}
};
1 change: 1 addition & 0 deletions test/all.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ requirejs([
'out/test/less.test',
'out/test/lua.test',
'out/test/markdown.test',
'out/test/msdax.test',
'out/test/objective-c.test',
'out/test/php.test',
'out/test/postiats.test',
Expand Down
Loading

0 comments on commit 2981d7b

Please sign in to comment.