void RenderOutputTemplateTextToken(
     MessageTemplateToken outputToken,
     IReadOnlyDictionary <string, LogEventPropertyValue> outputProperties)
 {
     Console.ForegroundColor = Punctuation;
     outputToken.Render(outputProperties, Console.Out, _formatProvider);
 }
示例#2
0
        private static DocumentRange GetTokenDocumentRange(
            MessageTemplateToken token,
            DocumentRange documentRange)
        {
            var startOffset = documentRange.TextRange.StartOffset + token.StartIndex + 1;

            return(new DocumentRange(documentRange.Document, new TextRange(startOffset, startOffset + token.Length)));
        }
        void RenderExceptionToken(Palette palette, MessageTemplateToken outputToken, IReadOnlyDictionary <string, LogEventPropertyValue> outputProperties, TextWriter output)
        {
            var sw = new StringWriter();

            outputToken.Render(outputProperties, sw, _formatProvider);
            var    lines = new StringReader(sw.ToString());
            string nextLine;

            while ((nextLine = lines.ReadLine()) != null)
            {
                if (nextLine.StartsWith(StackFrameLinePrefix))
                {
                    SetBaseColors(palette);
                }
                else
                {
                    SetHighlightColors(palette);
                }
                output.WriteLine(nextLine);
            }
        }
        void RenderLevelToken(
            LogEventLevel level,
            MessageTemplateToken token,
            IReadOnlyDictionary <string, LogEventPropertyValue> properties,
            TextWriter outputStream)
        {
            LevelFormat format;

            if (!_levels.TryGetValue(level, out format))
            {
                format = _levels[LogEventLevel.Warning];
            }

            SysConsole.ForegroundColor = format.Color;

            if (level == LogEventLevel.Error || level == LogEventLevel.Fatal)
            {
                SysConsole.BackgroundColor = format.Color;
                SysConsole.ForegroundColor = ConsoleColor.White;
            }

            token.Render(properties, outputStream);
            SysConsole.ResetColor();
        }
 void RenderOutputToken(Palette palette, MessageTemplateToken outputToken, IReadOnlyDictionary <string, LogEventPropertyValue> outputProperties, TextWriter output)
 {
     SetBaseColors(palette);
     outputToken.Render(outputProperties, output, _formatProvider);
 }
示例#6
0
        private static (TextRange, IStringLiteralAlterer) FindTokenTextRange(this ICSharpArgument argument, MessageTemplateToken token)
        {
            if (argument.Value is IAdditiveExpression additiveExpression && additiveExpression.ConstantValue.IsString())
            {
                var arguments = new LinkedList <ExpressionArgumentInfo>();
                FlattenAdditiveExpression(additiveExpression, arguments);

                var globalOffset = 0;
                foreach (var additiveArgument in arguments)
                {
                    var range = additiveArgument.GetDocumentRange();
                    var start = range.StartOffset.Offset;
                    var end   = range.EndOffset.Offset;

                    // Usually there are two quotes in the string expression
                    // But if it's a verbatim string, we should count @ symbol as well
                    var isVerbatimString      = additiveArgument.Expression.IsVerbatimString();
                    var nonTemplateTokenCount = isVerbatimString ? 3 : 2;

                    // The token index is zero-based so we need to subtract 1
                    if (token.StartIndex < end - start - 1 - nonTemplateTokenCount + globalOffset)
                    {
                        var tokenStartIndex = start + token.StartIndex - globalOffset + 1;
                        if (isVerbatimString)
                        {
                            tokenStartIndex++;
                        }

                        var tokenEndIndex = tokenStartIndex + token.Length;

                        return(new TextRange(tokenStartIndex, end > tokenEndIndex ? tokenEndIndex : end), StringLiteralAltererUtil.TryCreateStringLiteralByExpression(additiveArgument.Expression));
                    }

                    globalOffset += end - start - nonTemplateTokenCount;
                }
            }

            var startOffset = argument.GetDocumentRange().TextRange.StartOffset + token.StartIndex + 1;

            if (argument.Expression.IsVerbatimString())
            {
                startOffset++;
            }

            // ReSharper disable once AssignNullToNotNullAttribute
            return(new TextRange(startOffset, startOffset + token.Length), StringLiteralAltererUtil.TryCreateStringLiteralByExpression(argument.Expression));
        }
示例#7
0
        public static MessageTemplateTokenInformation GetTokenInformation(this ICSharpArgument argument, MessageTemplateToken token)
        {
            var(tokenTextRange, tokenArgument) = FindTokenTextRange(argument, token);
            var tokenDocument = argument.GetDocumentRange().Document;
            var documentRange = new DocumentRange(tokenDocument, tokenTextRange);

            return(new MessageTemplateTokenInformation(documentRange, tokenArgument));
        }
示例#8
0
 void RenderOutputToken(Palette palette, MessageTemplateToken outputToken, IPropertyDictionary outputProperties, TextWriter output)
 {
     SetBaseColors(palette);
     outputToken.Render(outputProperties, output, _formatProvider);
 }
示例#9
0
        public static DocumentRange GetTokenDocumentRange(this IStringLiteralAlterer stringLiteralAlterer, MessageTemplateToken token)
        {
            var documentRange = stringLiteralAlterer.Expression.GetDocumentRange();

            return(GetTokenDocumentRange(token, documentRange));
        }
示例#10
0
        public static DocumentRange GetTokenDocumentRange(this ICSharpArgument argument, MessageTemplateToken token)
        {
            var documentRange = argument.GetDocumentRange();

            return(GetTokenDocumentRange(token, documentRange));
        }
示例#11
0
        private static (TextRange, IStringLiteralAlterer) FindTokenTextRange(this ICSharpArgument argument, MessageTemplateToken token)
        {
            var documentRange = argument.GetDocumentRange();

            if (argument.Value is IAdditiveExpression additiveExpression && additiveExpression.ConstantValue.IsString())
            {
                var arguments = new LinkedList <ExpressionArgumentInfo>();
                FlattenAdditiveExpression(additiveExpression, arguments);

                var globalOffset = 0;
                foreach (var additiveArgument in arguments)
                {
                    var range = additiveArgument.GetDocumentRange();
                    var start = range.StartOffset.Offset;
                    var end   = range.EndOffset.Offset;

                    // The token index is zero-based and we remove two quotes
                    if (token.StartIndex < end - start - 3 + globalOffset)
                    {
                        var tokenStartIndex = start + token.StartIndex - globalOffset + 1;
                        var tokenEndIndex   = tokenStartIndex + token.Length;

                        return(new TextRange(tokenStartIndex, end > tokenEndIndex ? tokenEndIndex : end), StringLiteralAltererUtil.TryCreateStringLiteralByExpression(additiveArgument.Expression));
                    }

                    globalOffset += end - start - 2;
                }
            }

            var startOffset = documentRange.TextRange.StartOffset + token.StartIndex + 1;

            // ReSharper disable once AssignNullToNotNullAttribute
            return(new TextRange(startOffset, startOffset + token.Length), StringLiteralAltererUtil.TryCreateStringLiteralByExpression(argument.Expression));
        }