/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
export var conf = {
    comments: {
        lineComment: '//',
        blockComment: ['/*', '*/']
    },
    brackets: [
        ['[', ']'],
        ['(', ')'],
        ['{', '}']
    ],
    autoClosingPairs: [
        { open: '"', close: '"', notIn: ['string', 'comment', 'identifier'] },
        { open: '[', close: ']', notIn: ['string', 'comment', 'identifier'] },
        { open: '(', close: ')', notIn: ['string', 'comment', 'identifier'] },
        { open: '{', close: '}', notIn: ['string', 'comment', 'identifier'] }
    ]
};
export var language = {
    defaultToken: '',
    tokenPostfix: '.pq',
    ignoreCase: false,
    brackets: [
        { open: '[', close: ']', token: 'delimiter.square' },
        { open: '{', close: '}', token: 'delimiter.brackets' },
        { open: '(', close: ')', token: 'delimiter.parenthesis' }
    ],
    operatorKeywords: ['and', 'not', 'or'],
    keywords: [
        'as',
        'each',
        'else',
        'error',
        'false',
        'if',
        'in',
        'is',
        'let',
        'meta',
        'otherwise',
        'section',
        'shared',
        'then',
        'true',
        'try',
        'type'
    ],
    constructors: [
        '#binary',
        '#date',
        '#datetime',
        '#datetimezone',
        '#duration',
        '#table',
        '#time'
    ],
    constants: ['#infinity', '#nan', '#sections', '#shared'],
    typeKeywords: [
        'action',
        'any',
        'anynonnull',
        'none',
        'null',
        'logical',
        'number',
        'time',
        'date',
        'datetime',
        'datetimezone',
        'duration',
        'text',
        'binary',
        'list',
        'record',
        'table',
        'function'
    ],
    builtinFunctions: [
        'Access.Database',
        'Action.Return',
        'Action.Sequence',
        'Action.Try',
        'ActiveDirectory.Domains',
        'AdoDotNet.DataSource',
        'AdoDotNet.Query',
        'AdobeAnalytics.Cubes',
        'AnalysisServices.Database',
        'AnalysisServices.Databases',
        'AzureStorage.BlobContents',
        'AzureStorage.Blobs',
        'AzureStorage.Tables',
        'Binary.Buffer',
        'Binary.Combine',
        'Binary.Compress',
        'Binary.Decompress',
        'Binary.End',
        'Binary.From',
        'Binary.FromList',
        'Binary.FromText',
        'Binary.InferContentType',
        'Binary.Length',
        'Binary.ToList',
        'Binary.ToText',
        'BinaryFormat.7BitEncodedSignedInteger',
        'BinaryFormat.7BitEncodedUnsignedInteger',
        'BinaryFormat.Binary',
        'BinaryFormat.Byte',
        'BinaryFormat.ByteOrder',
        'BinaryFormat.Choice',
        'BinaryFormat.Decimal',
        'BinaryFormat.Double',
        'BinaryFormat.Group',
        'BinaryFormat.Length',
        'BinaryFormat.List',
        'BinaryFormat.Null',
        'BinaryFormat.Record',
        'BinaryFormat.SignedInteger16',
        'BinaryFormat.SignedInteger32',
        'BinaryFormat.SignedInteger64',
        'BinaryFormat.Single',
        'BinaryFormat.Text',
        'BinaryFormat.Transform',
        'BinaryFormat.UnsignedInteger16',
        'BinaryFormat.UnsignedInteger32',
        'BinaryFormat.UnsignedInteger64',
        'Byte.From',
        'Character.FromNumber',
        'Character.ToNumber',
        'Combiner.CombineTextByDelimiter',
        'Combiner.CombineTextByEachDelimiter',
        'Combiner.CombineTextByLengths',
        'Combiner.CombineTextByPositions',
        'Combiner.CombineTextByRanges',
        'Comparer.Equals',
        'Comparer.FromCulture',
        'Comparer.Ordinal',
        'Comparer.OrdinalIgnoreCase',
        'Csv.Document',
        'Cube.AddAndExpandDimensionColumn',
        'Cube.AddMeasureColumn',
        'Cube.ApplyParameter',
        'Cube.AttributeMemberId',
        'Cube.AttributeMemberProperty',
        'Cube.CollapseAndRemoveColumns',
        'Cube.Dimensions',
        'Cube.DisplayFolders',
        'Cube.Measures',
        'Cube.Parameters',
        'Cube.Properties',
        'Cube.PropertyKey',
        'Cube.ReplaceDimensions',
        'Cube.Transform',
        'Currency.From',
        'DB2.Database',
        'Date.AddDays',
        'Date.AddMonths',
        'Date.AddQuarters',
        'Date.AddWeeks',
        'Date.AddYears',
        'Date.Day',
        'Date.DayOfWeek',
        'Date.DayOfWeekName',
        'Date.DayOfYear',
        'Date.DaysInMonth',
        'Date.EndOfDay',
        'Date.EndOfMonth',
        'Date.EndOfQuarter',
        'Date.EndOfWeek',
        'Date.EndOfYear',
        'Date.From',
        'Date.FromText',
        'Date.IsInCurrentDay',
        'Date.IsInCurrentMonth',
        'Date.IsInCurrentQuarter',
        'Date.IsInCurrentWeek',
        'Date.IsInCurrentYear',
        'Date.IsInNextDay',
        'Date.IsInNextMonth',
        'Date.IsInNextNDays',
        'Date.IsInNextNMonths',
        'Date.IsInNextNQuarters',
        'Date.IsInNextNWeeks',
        'Date.IsInNextNYears',
        'Date.IsInNextQuarter',
        'Date.IsInNextWeek',
        'Date.IsInNextYear',
        'Date.IsInPreviousDay',
        'Date.IsInPreviousMonth',
        'Date.IsInPreviousNDays',
        'Date.IsInPreviousNMonths',
        'Date.IsInPreviousNQuarters',
        'Date.IsInPreviousNWeeks',
        'Date.IsInPreviousNYears',
        'Date.IsInPreviousQuarter',
        'Date.IsInPreviousWeek',
        'Date.IsInPreviousYear',
        'Date.IsInYearToDate',
        'Date.IsLeapYear',
        'Date.Month',
        'Date.MonthName',
        'Date.QuarterOfYear',
        'Date.StartOfDay',
        'Date.StartOfMonth',
        'Date.StartOfQuarter',
        'Date.StartOfWeek',
        'Date.StartOfYear',
        'Date.ToRecord',
        'Date.ToText',
        'Date.WeekOfMonth',
        'Date.WeekOfYear',
        'Date.Year',
        'DateTime.AddZone',
        'DateTime.Date',
        'DateTime.FixedLocalNow',
        'DateTime.From',
        'DateTime.FromFileTime',
        'DateTime.FromText',
        'DateTime.IsInCurrentHour',
        'DateTime.IsInCurrentMinute',
        'DateTime.IsInCurrentSecond',
        'DateTime.IsInNextHour',
        'DateTime.IsInNextMinute',
        'DateTime.IsInNextNHours',
        'DateTime.IsInNextNMinutes',
        'DateTime.IsInNextNSeconds',
        'DateTime.IsInNextSecond',
        'DateTime.IsInPreviousHour',
        'DateTime.IsInPreviousMinute',
        'DateTime.IsInPreviousNHours',
        'DateTime.IsInPreviousNMinutes',
        'DateTime.IsInPreviousNSeconds',
        'DateTime.IsInPreviousSecond',
        'DateTime.LocalNow',
        'DateTime.Time',
        'DateTime.ToRecord',
        'DateTime.ToText',
        'DateTimeZone.FixedLocalNow',
        'DateTimeZone.FixedUtcNow',
        'DateTimeZone.From',
        'DateTimeZone.FromFileTime',
        'DateTimeZone.FromText',
        'DateTimeZone.LocalNow',
        'DateTimeZone.RemoveZone',
        'DateTimeZone.SwitchZone',
        'DateTimeZone.ToLocal',
        'DateTimeZone.ToRecord',
        'DateTimeZone.ToText',
        'DateTimeZone.ToUtc',
        'DateTimeZone.UtcNow',
        'DateTimeZone.ZoneHours',
        'DateTimeZone.ZoneMinutes',
        'Decimal.From',
        'Diagnostics.ActivityId',
        'Diagnostics.Trace',
        'DirectQueryCapabilities.From',
        'Double.From',
        'Duration.Days',
        'Duration.From',
        'Duration.FromText',
        'Duration.Hours',
        'Duration.Minutes',
        'Duration.Seconds',
        'Duration.ToRecord',
        'Duration.ToText',
        'Duration.TotalDays',
        'Duration.TotalHours',
        'Duration.TotalMinutes',
        'Duration.TotalSeconds',
        'Embedded.Value',
        'Error.Record',
        'Excel.CurrentWorkbook',
        'Excel.Workbook',
        'Exchange.Contents',
        'Expression.Constant',
        'Expression.Evaluate',
        'Expression.Identifier',
        'Facebook.Graph',
        'File.Contents',
        'Folder.Contents',
        'Folder.Files',
        'Function.From',
        'Function.Invoke',
        'Function.InvokeAfter',
        'Function.IsDataSource',
        'GoogleAnalytics.Accounts',
        'Guid.From',
        'HdInsight.Containers',
        'HdInsight.Contents',
        'HdInsight.Files',
        'Hdfs.Contents',
        'Hdfs.Files',
        'Informix.Database',
        'Int16.From',
        'Int32.From',
        'Int64.From',
        'Int8.From',
        'ItemExpression.From',
        'Json.Document',
        'Json.FromValue',
        'Lines.FromBinary',
        'Lines.FromText',
        'Lines.ToBinary',
        'Lines.ToText',
        'List.Accumulate',
        'List.AllTrue',
        'List.Alternate',
        'List.AnyTrue',
        'List.Average',
        'List.Buffer',
        'List.Combine',
        'List.Contains',
        'List.ContainsAll',
        'List.ContainsAny',
        'List.Count',
        'List.Covariance',
        'List.DateTimeZones',
        'List.DateTimes',
        'List.Dates',
        'List.Difference',
        'List.Distinct',
        'List.Durations',
        'List.FindText',
        'List.First',
        'List.FirstN',
        'List.Generate',
        'List.InsertRange',
        'List.Intersect',
        'List.IsDistinct',
        'List.IsEmpty',
        'List.Last',
        'List.LastN',
        'List.MatchesAll',
        'List.MatchesAny',
        'List.Max',
        'List.MaxN',
        'List.Median',
        'List.Min',
        'List.MinN',
        'List.Mode',
        'List.Modes',
        'List.NonNullCount',
        'List.Numbers',
        'List.PositionOf',
        'List.PositionOfAny',
        'List.Positions',
        'List.Product',
        'List.Random',
        'List.Range',
        'List.RemoveFirstN',
        'List.RemoveItems',
        'List.RemoveLastN',
        'List.RemoveMatchingItems',
        'List.RemoveNulls',
        'List.RemoveRange',
        'List.Repeat',
        'List.ReplaceMatchingItems',
        'List.ReplaceRange',
        'List.ReplaceValue',
        'List.Reverse',
        'List.Select',
        'List.Single',
        'List.SingleOrDefault',
        'List.Skip',
        'List.Sort',
        'List.StandardDeviation',
        'List.Sum',
        'List.Times',
        'List.Transform',
        'List.TransformMany',
        'List.Union',
        'List.Zip',
        'Logical.From',
        'Logical.FromText',
        'Logical.ToText',
        'MQ.Queue',
        'MySQL.Database',
        'Number.Abs',
        'Number.Acos',
        'Number.Asin',
        'Number.Atan',
        'Number.Atan2',
        'Number.BitwiseAnd',
        'Number.BitwiseNot',
        'Number.BitwiseOr',
        'Number.BitwiseShiftLeft',
        'Number.BitwiseShiftRight',
        'Number.BitwiseXor',
        'Number.Combinations',
        'Number.Cos',
        'Number.Cosh',
        'Number.Exp',
        'Number.Factorial',
        'Number.From',
        'Number.FromText',
        'Number.IntegerDivide',
        'Number.IsEven',
        'Number.IsNaN',
        'Number.IsOdd',
        'Number.Ln',
        'Number.Log',
        'Number.Log10',
        'Number.Mod',
        'Number.Permutations',
        'Number.Power',
        'Number.Random',
        'Number.RandomBetween',
        'Number.Round',
        'Number.RoundAwayFromZero',
        'Number.RoundDown',
        'Number.RoundTowardZero',
        'Number.RoundUp',
        'Number.Sign',
        'Number.Sin',
        'Number.Sinh',
        'Number.Sqrt',
        'Number.Tan',
        'Number.Tanh',
        'Number.ToText',
        'OData.Feed',
        'Odbc.DataSource',
        'Odbc.Query',
        'OleDb.DataSource',
        'OleDb.Query',
        'Oracle.Database',
        'Percentage.From',
        'PostgreSQL.Database',
        'RData.FromBinary',
        'Record.AddField',
        'Record.Combine',
        'Record.Field',
        'Record.FieldCount',
        'Record.FieldNames',
        'Record.FieldOrDefault',
        'Record.FieldValues',
        'Record.FromList',
        'Record.FromTable',
        'Record.HasFields',
        'Record.RemoveFields',
        'Record.RenameFields',
        'Record.ReorderFields',
        'Record.SelectFields',
        'Record.ToList',
        'Record.ToTable',
        'Record.TransformFields',
        'Replacer.ReplaceText',
        'Replacer.ReplaceValue',
        'RowExpression.Column',
        'RowExpression.From',
        'Salesforce.Data',
        'Salesforce.Reports',
        'SapBusinessWarehouse.Cubes',
        'SapHana.Database',
        'SharePoint.Contents',
        'SharePoint.Files',
        'SharePoint.Tables',
        'Single.From',
        'Soda.Feed',
        'Splitter.SplitByNothing',
        'Splitter.SplitTextByAnyDelimiter',
        'Splitter.SplitTextByDelimiter',
        'Splitter.SplitTextByEachDelimiter',
        'Splitter.SplitTextByLengths',
        'Splitter.SplitTextByPositions',
        'Splitter.SplitTextByRanges',
        'Splitter.SplitTextByRepeatedLengths',
        'Splitter.SplitTextByWhitespace',
        'Sql.Database',
        'Sql.Databases',
        'SqlExpression.SchemaFrom',
        'SqlExpression.ToExpression',
        'Sybase.Database',
        'Table.AddColumn',
        'Table.AddIndexColumn',
        'Table.AddJoinColumn',
        'Table.AddKey',
        'Table.AggregateTableColumn',
        'Table.AlternateRows',
        'Table.Buffer',
        'Table.Column',
        'Table.ColumnCount',
        'Table.ColumnNames',
        'Table.ColumnsOfType',
        'Table.Combine',
        'Table.CombineColumns',
        'Table.Contains',
        'Table.ContainsAll',
        'Table.ContainsAny',
        'Table.DemoteHeaders',
        'Table.Distinct',
        'Table.DuplicateColumn',
        'Table.ExpandListColumn',
        'Table.ExpandRecordColumn',
        'Table.ExpandTableColumn',
        'Table.FillDown',
        'Table.FillUp',
        'Table.FilterWithDataTable',
        'Table.FindText',
        'Table.First',
        'Table.FirstN',
        'Table.FirstValue',
        'Table.FromColumns',
        'Table.FromList',
        'Table.FromPartitions',
        'Table.FromRecords',
        'Table.FromRows',
        'Table.FromValue',
        'Table.Group',
        'Table.HasColumns',
        'Table.InsertRows',
        'Table.IsDistinct',
        'Table.IsEmpty',
        'Table.Join',
        'Table.Keys',
        'Table.Last',
        'Table.LastN',
        'Table.MatchesAllRows',
        'Table.MatchesAnyRows',
        'Table.Max',
        'Table.MaxN',
        'Table.Min',
        'Table.MinN',
        'Table.NestedJoin',
        'Table.Partition',
        'Table.PartitionValues',
        'Table.Pivot',
        'Table.PositionOf',
        'Table.PositionOfAny',
        'Table.PrefixColumns',
        'Table.Profile',
        'Table.PromoteHeaders',
        'Table.Range',
        'Table.RemoveColumns',
        'Table.RemoveFirstN',
        'Table.RemoveLastN',
        'Table.RemoveMatchingRows',
        'Table.RemoveRows',
        'Table.RemoveRowsWithErrors',
        'Table.RenameColumns',
        'Table.ReorderColumns',
        'Table.Repeat',
        'Table.ReplaceErrorValues',
        'Table.ReplaceKeys',
        'Table.ReplaceMatchingRows',
        'Table.ReplaceRelationshipIdentity',
        'Table.ReplaceRows',
        'Table.ReplaceValue',
        'Table.ReverseRows',
        'Table.RowCount',
        'Table.Schema',
        'Table.SelectColumns',
        'Table.SelectRows',
        'Table.SelectRowsWithErrors',
        'Table.SingleRow',
        'Table.Skip',
        'Table.Sort',
        'Table.SplitColumn',
        'Table.ToColumns',
        'Table.ToList',
        'Table.ToRecords',
        'Table.ToRows',
        'Table.TransformColumnNames',
        'Table.TransformColumnTypes',
        'Table.TransformColumns',
        'Table.TransformRows',
        'Table.Transpose',
        'Table.Unpivot',
        'Table.UnpivotOtherColumns',
        'Table.View',
        'Table.ViewFunction',
        'TableAction.DeleteRows',
        'TableAction.InsertRows',
        'TableAction.UpdateRows',
        'Tables.GetRelationships',
        'Teradata.Database',
        'Text.AfterDelimiter',
        'Text.At',
        'Text.BeforeDelimiter',
        'Text.BetweenDelimiters',
        'Text.Clean',
        'Text.Combine',
        'Text.Contains',
        'Text.End',
        'Text.EndsWith',
        'Text.Format',
        'Text.From',
        'Text.FromBinary',
        'Text.Insert',
        'Text.Length',
        'Text.Lower',
        'Text.Middle',
        'Text.NewGuid',
        'Text.PadEnd',
        'Text.PadStart',
        'Text.PositionOf',
        'Text.PositionOfAny',
        'Text.Proper',
        'Text.Range',
        'Text.Remove',
        'Text.RemoveRange',
        'Text.Repeat',
        'Text.Replace',
        'Text.ReplaceRange',
        'Text.Select',
        'Text.Split',
        'Text.SplitAny',
        'Text.Start',
        'Text.StartsWith',
        'Text.ToBinary',
        'Text.ToList',
        'Text.Trim',
        'Text.TrimEnd',
        'Text.TrimStart',
        'Text.Upper',
        'Time.EndOfHour',
        'Time.From',
        'Time.FromText',
        'Time.Hour',
        'Time.Minute',
        'Time.Second',
        'Time.StartOfHour',
        'Time.ToRecord',
        'Time.ToText',
        'Type.AddTableKey',
        'Type.ClosedRecord',
        'Type.Facets',
        'Type.ForFunction',
        'Type.ForRecord',
        'Type.FunctionParameters',
        'Type.FunctionRequiredParameters',
        'Type.FunctionReturn',
        'Type.Is',
        'Type.IsNullable',
        'Type.IsOpenRecord',
        'Type.ListItem',
        'Type.NonNullable',
        'Type.OpenRecord',
        'Type.RecordFields',
        'Type.ReplaceFacets',
        'Type.ReplaceTableKeys',
        'Type.TableColumn',
        'Type.TableKeys',
        'Type.TableRow',
        'Type.TableSchema',
        'Type.Union',
        'Uri.BuildQueryString',
        'Uri.Combine',
        'Uri.EscapeDataString',
        'Uri.Parts',
        'Value.Add',
        'Value.As',
        'Value.Compare',
        'Value.Divide',
        'Value.Equals',
        'Value.Firewall',
        'Value.FromText',
        'Value.Is',
        'Value.Metadata',
        'Value.Multiply',
        'Value.NativeQuery',
        'Value.NullableEquals',
        'Value.RemoveMetadata',
        'Value.ReplaceMetadata',
        'Value.ReplaceType',
        'Value.Subtract',
        'Value.Type',
        'ValueAction.NativeStatement',
        'ValueAction.Replace',
        'Variable.Value',
        'Web.Contents',
        'Web.Page',
        'WebAction.Request',
        'Xml.Document',
        'Xml.Tables'
    ],
    builtinConstants: [
        'BinaryEncoding.Base64',
        'BinaryEncoding.Hex',
        'BinaryOccurrence.Optional',
        'BinaryOccurrence.Repeating',
        'BinaryOccurrence.Required',
        'ByteOrder.BigEndian',
        'ByteOrder.LittleEndian',
        'Compression.Deflate',
        'Compression.GZip',
        'CsvStyle.QuoteAfterDelimiter',
        'CsvStyle.QuoteAlways',
        'Culture.Current',
        'Day.Friday',
        'Day.Monday',
        'Day.Saturday',
        'Day.Sunday',
        'Day.Thursday',
        'Day.Tuesday',
        'Day.Wednesday',
        'ExtraValues.Error',
        'ExtraValues.Ignore',
        'ExtraValues.List',
        'GroupKind.Global',
        'GroupKind.Local',
        'JoinAlgorithm.Dynamic',
        'JoinAlgorithm.LeftHash',
        'JoinAlgorithm.LeftIndex',
        'JoinAlgorithm.PairwiseHash',
        'JoinAlgorithm.RightHash',
        'JoinAlgorithm.RightIndex',
        'JoinAlgorithm.SortMerge',
        'JoinKind.FullOuter',
        'JoinKind.Inner',
        'JoinKind.LeftAnti',
        'JoinKind.LeftOuter',
        'JoinKind.RightAnti',
        'JoinKind.RightOuter',
        'JoinSide.Left',
        'JoinSide.Right',
        'MissingField.Error',
        'MissingField.Ignore',
        'MissingField.UseNull',
        'Number.E',
        'Number.Epsilon',
        'Number.NaN',
        'Number.NegativeInfinity',
        'Number.PI',
        'Number.PositiveInfinity',
        'Occurrence.All',
        'Occurrence.First',
        'Occurrence.Last',
        'Occurrence.Optional',
        'Occurrence.Repeating',
        'Occurrence.Required',
        'Order.Ascending',
        'Order.Descending',
        'Precision.Decimal',
        'Precision.Double',
        'QuoteStyle.Csv',
        'QuoteStyle.None',
        'RelativePosition.FromEnd',
        'RelativePosition.FromStart',
        'RoundingMode.AwayFromZero',
        'RoundingMode.Down',
        'RoundingMode.ToEven',
        'RoundingMode.TowardZero',
        'RoundingMode.Up',
        'SapHanaDistribution.All',
        'SapHanaDistribution.Connection',
        'SapHanaDistribution.Off',
        'SapHanaDistribution.Statement',
        'SapHanaRangeOperator.Equals',
        'SapHanaRangeOperator.GreaterThan',
        'SapHanaRangeOperator.GreaterThanOrEquals',
        'SapHanaRangeOperator.LessThan',
        'SapHanaRangeOperator.LessThanOrEquals',
        'SapHanaRangeOperator.NotEquals',
        'TextEncoding.Ascii',
        'TextEncoding.BigEndianUnicode',
        'TextEncoding.Unicode',
        'TextEncoding.Utf16',
        'TextEncoding.Utf8',
        'TextEncoding.Windows',
        'TraceLevel.Critical',
        'TraceLevel.Error',
        'TraceLevel.Information',
        'TraceLevel.Verbose',
        'TraceLevel.Warning',
        'WebMethod.Delete',
        'WebMethod.Get',
        'WebMethod.Head',
        'WebMethod.Patch',
        'WebMethod.Post',
        'WebMethod.Put'
    ],
    builtinTypes: [
        'Action.Type',
        'Any.Type',
        'Binary.Type',
        'BinaryEncoding.Type',
        'BinaryOccurrence.Type',
        'Byte.Type',
        'ByteOrder.Type',
        'Character.Type',
        'Compression.Type',
        'CsvStyle.Type',
        'Currency.Type',
        'Date.Type',
        'DateTime.Type',
        'DateTimeZone.Type',
        'Day.Type',
        'Decimal.Type',
        'Double.Type',
        'Duration.Type',
        'ExtraValues.Type',
        'Function.Type',
        'GroupKind.Type',
        'Guid.Type',
        'Int16.Type',
        'Int32.Type',
        'Int64.Type',
        'Int8.Type',
        'JoinAlgorithm.Type',
        'JoinKind.Type',
        'JoinSide.Type',
        'List.Type',
        'Logical.Type',
        'MissingField.Type',
        'None.Type',
        'Null.Type',
        'Number.Type',
        'Occurrence.Type',
        'Order.Type',
        'Password.Type',
        'Percentage.Type',
        'Precision.Type',
        'QuoteStyle.Type',
        'Record.Type',
        'RelativePosition.Type',
        'RoundingMode.Type',
        'SapHanaDistribution.Type',
        'SapHanaRangeOperator.Type',
        'Single.Type',
        'Table.Type',
        'Text.Type',
        'TextEncoding.Type',
        'Time.Type',
        'TraceLevel.Type',
        'Type.Type',
        'Uri.Type',
        'WebMethod.Type'
    ],
    tokenizer: {
        root: [
            // quoted identifier
            [/#"[\w \.]+"/, 'identifier.quote'],
            // numbers
            [/\d*\.\d+([eE][\-+]?\d+)?/, 'number.float'],
            [/0[xX][0-9a-fA-F]+/, 'number.hex'],
            [/\d+([eE][\-+]?\d+)?/, 'number'],
            // keywords
            [
                /(#?[a-z]+)\b/,
                {
                    cases: {
                        '@typeKeywords': 'type',
                        '@keywords': 'keyword',
                        '@constants': 'constant',
                        '@constructors': 'constructor',
                        '@operatorKeywords': 'operators',
                        '@default': 'identifier'
                    }
                }
            ],
            // built-in types
            [
                /\b([A-Z][a-zA-Z0-9]+\.Type)\b/,
                {
                    cases: {
                        '@builtinTypes': 'type',
                        '@default': 'identifier'
                    }
                }
            ],
            // other built-ins
            [
                /\b([A-Z][a-zA-Z0-9]+\.[A-Z][a-zA-Z0-9]+)\b/,
                {
                    cases: {
                        '@builtinFunctions': 'keyword.function',
                        '@builtinConstants': 'constant',
                        '@default': 'identifier'
                    }
                }
            ],
            // other identifiers
            [/\b([a-zA-Z_][\w\.]*)\b/, 'identifier'],
            { include: '@whitespace' },
            { include: '@comments' },
            { include: '@strings' },
            [/[{}()\[\]]/, '@brackets'],
            [/([=\+<>\-\*&@\?\/!])|([<>]=)|(<>)|(=>)|(\.\.\.)|(\.\.)/, 'operators'],
            [/[,;]/, 'delimiter']
        ],
        whitespace: [[/\s+/, 'white']],
        comments: [
            ['\\/\\*', 'comment', '@comment'],
            ['\\/\\/+.*', 'comment']
        ],
        comment: [
            ['\\*\\/', 'comment', '@pop'],
            ['.', 'comment']
        ],
        strings: [['"', 'string', '@string']],
        string: [
            ['""', 'string.escape'],
            ['"', 'string', '@pop'],
            ['.', 'string']
        ]
    }
};
