/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
define(["require", "exports"], function (require, exports) {
    'use strict';
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.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'] },
        ]
    };
    exports.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"]
            ]
        }
    };
});
