/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
'use strict';
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"]
        ]
    }
};
