/// <inheritdoc/>
        public override int Set(TextWriter output, RichTextBoxThemeStyle style)
        {
            if (_styles.TryGetValue(style, out var runStyle))
            {
                var buffer = new StringBuilder();
                buffer.Append("<Run");

                var _ = 0;

                var backgroundColor = runStyle.Background;
                if (!string.IsNullOrWhiteSpace(backgroundColor))
                {
                    buffer.AppendFormat(" Background=\"{0}\"", SpecialCharsEscaping.Apply(backgroundColor, ref _));
                }

                var foregroundColor = runStyle.Foreground;
                if (!string.IsNullOrWhiteSpace(foregroundColor))
                {
                    buffer.AppendFormat(" Foreground=\"{0}\"", SpecialCharsEscaping.Apply(foregroundColor, ref _));
                }

                var fontWeight = runStyle.FontWeight;
                if (!string.IsNullOrWhiteSpace(fontWeight))
                {
                    buffer.AppendFormat(" FontWeight=\"{0}\"", SpecialCharsEscaping.Apply(fontWeight, ref _));
                }

                buffer.Append('>');

                output.Write(buffer);
                return(buffer.Length);
            }

            return(0);
        }
Esempio n. 2
0
        protected override int VisitStructureValue(ThemedValueFormatterState state, StructureValue structure)
        {
            var count = 0;

            if (structure.TypeTag != null)
            {
                using (ApplyStyle(state.Output, RichTextBoxThemeStyle.Name, ref count))
                {
                    state.Output.Write(structure.TypeTag);
                }

                state.Output.Write(' ');
            }

            using (ApplyStyle(state.Output, RichTextBoxThemeStyle.TertiaryText, ref count))
            {
                state.Output.Write('{');
            }

            var delim = string.Empty;

            // ReSharper disable once ForCanBeConvertedToForeach
            for (var index = 0; index < structure.Properties.Count; ++index)
            {
                if (delim.Length != 0)
                {
                    using (ApplyStyle(state.Output, RichTextBoxThemeStyle.TertiaryText, ref count))
                    {
                        state.Output.Write(delim);
                    }
                }

                delim = ", ";

                var property = structure.Properties[index];

                using (ApplyStyle(state.Output, RichTextBoxThemeStyle.Name, ref count))
                {
                    var escapedPropertyName = SpecialCharsEscaping.Apply(property.Name, ref count);
                    state.Output.Write(escapedPropertyName);
                }

                using (ApplyStyle(state.Output, RichTextBoxThemeStyle.TertiaryText, ref count))
                {
                    state.Output.Write('=');
                }

                count += Visit(state.Nest(), property.Value);
            }

            using (ApplyStyle(state.Output, RichTextBoxThemeStyle.TertiaryText, ref count))
            {
                state.Output.Write('}');
            }

            return count;
        }
        public override void Render(LogEvent logEvent, TextWriter output)
        {
            var _ = 0;
            var text = _text;

            using (_theme.Apply(output, RichTextBoxThemeStyle.TertiaryText, ref _))
            {
                text = SpecialCharsEscaping.Apply(text, ref _);
                output.Write(text);
            }
        }
Esempio n. 4
0
        protected override int VisitDictionaryValue(ThemedValueFormatterState state, DictionaryValue dictionary)
        {
            var count = 0;

            using (ApplyStyle(state.Output, RichTextBoxThemeStyle.TertiaryText, ref count))
            {
                state.Output.Write('{');
            }

            var delim = string.Empty;

            foreach (var element in dictionary.Elements)
            {
                if (delim.Length != 0)
                {
                    using (ApplyStyle(state.Output, RichTextBoxThemeStyle.TertiaryText, ref count))
                    {
                        state.Output.Write(delim);
                    }
                }

                delim = ", ";

                var style = element.Key.Value is null
                    ? RichTextBoxThemeStyle.Null
                    : element.Key.Value is string
                            ?RichTextBoxThemeStyle.String
                            : RichTextBoxThemeStyle.Scalar;

                using (ApplyStyle(state.Output, style, ref count))
                {
                    var escapedKey = SpecialCharsEscaping.Apply((element.Key.Value ?? "null").ToString(), ref count);
                    JsonValueFormatter.WriteQuotedJsonString(escapedKey, state.Output);
                }

                using (ApplyStyle(state.Output, RichTextBoxThemeStyle.TertiaryText, ref count))
                {
                    state.Output.Write(": ");
                }

                count += Visit(state.Nest(), element.Value);
            }

            using (ApplyStyle(state.Output, RichTextBoxThemeStyle.TertiaryText, ref count))
            {
                state.Output.Write('}');
            }

            return(count);
        }
Esempio n. 5
0
        public override void Render(LogEvent logEvent, TextWriter output)
        {
            // Padding is never applied by this renderer.

            if (logEvent.Exception is null)
            {
                return;
            }

            var lines = new StringReader(logEvent.Exception.ToString());

            string nextLine;

            while ((nextLine = lines.ReadLine()) != null)
            {
                var style = nextLine.StartsWith(_stackFrameLinePrefix) ? RichTextBoxThemeStyle.SecondaryText : RichTextBoxThemeStyle.Text;
                var _     = 0;

                using (_theme.Apply(output, style, ref _))
                {
                    output.WriteLine(SpecialCharsEscaping.Apply(nextLine, ref _));
                }
            }
        }
Esempio n. 6
0
        public int FormatLiteralValue(ScalarValue scalar, TextWriter output, string format)
        {
            var value = scalar.Value;
            var count = 0;

            if (value is null)
            {
                using (ApplyStyle(output, RichTextBoxThemeStyle.Null, ref count))
                {
                    output.Write("null");
                }

                return count;
            }

            if (value is string str)
            {
                using (ApplyStyle(output, RichTextBoxThemeStyle.String, ref count))
                {
                    var escapedStr = SpecialCharsEscaping.Apply(str, ref count);

                    if (format != "l")
                    {
                        JsonValueFormatter.WriteQuotedJsonString(escapedStr, output);
                    }
                    else
                    {
                        output.Write(escapedStr);
                    }
                }

                return count;
            }

            if (value is ValueType)
            {
                if (value is int || value is uint || value is long || value is ulong ||
                    value is decimal || value is byte || value is sbyte || value is short ||
                    value is ushort || value is float || value is double)
                {
                    using (ApplyStyle(output, RichTextBoxThemeStyle.Number, ref count))
                    {
                        scalar.Render(output, format, _formatProvider);
                    }

                    return count;
                }

                if (value is bool b)
                {
                    using (ApplyStyle(output, RichTextBoxThemeStyle.Boolean, ref count))
                    {
                        output.Write(b.ToString(CultureInfo.InvariantCulture));
                    }

                    return count;
                }

                if (value is char ch)
                {
                    using (ApplyStyle(output, RichTextBoxThemeStyle.Scalar, ref count))
                    {
                        output.Write('\'');
                        output.Write(SpecialCharsEscaping.Apply(ch.ToString(), ref count));
                        output.Write('\'');
                    }

                    return count;
                }
            }

            using (ApplyStyle(output, RichTextBoxThemeStyle.Scalar, ref count))
            {
                scalar.Render(output, format, _formatProvider);
            }

            return count;
        }
Esempio n. 7
0
        private int FormatLiteralValue(ScalarValue scalar, TextWriter output)
        {
            var value = scalar.Value;
            var count = 0;

            if (value is null)
            {
                using (ApplyStyle(output, RichTextBoxThemeStyle.Null, ref count))
                {
                    output.Write("null");
                }

                return(count);
            }

            if (value is string str)
            {
                using (ApplyStyle(output, RichTextBoxThemeStyle.String, ref count))
                {
                    var escapedValue = SpecialCharsEscaping.Apply(str, ref count);
                    JsonValueFormatter.WriteQuotedJsonString(escapedValue, output);
                }

                return(count);
            }

            if (value is ValueType)
            {
                if (value is int || value is uint || value is long || value is ulong || value is decimal ||
                    value is byte || value is sbyte || value is short || value is ushort)
                {
                    using (ApplyStyle(output, RichTextBoxThemeStyle.Number, ref count))
                    {
                        output.Write(((IFormattable)value).ToString(null, CultureInfo.InvariantCulture));
                    }

                    return(count);
                }

                if (value is double d)
                {
                    using (ApplyStyle(output, RichTextBoxThemeStyle.Number, ref count))
                    {
                        if (double.IsNaN(d) || double.IsInfinity(d))
                        {
                            JsonValueFormatter.WriteQuotedJsonString(d.ToString(CultureInfo.InvariantCulture), output);
                        }
                        else
                        {
                            output.Write(d.ToString("R", CultureInfo.InvariantCulture));
                        }
                    }

                    return(count);
                }

                if (value is float f)
                {
                    using (ApplyStyle(output, RichTextBoxThemeStyle.Number, ref count))
                    {
                        if (double.IsNaN(f) || double.IsInfinity(f))
                        {
                            JsonValueFormatter.WriteQuotedJsonString(f.ToString(CultureInfo.InvariantCulture), output);
                        }
                        else
                        {
                            output.Write(f.ToString("R", CultureInfo.InvariantCulture));
                        }
                    }

                    return(count);
                }

                if (value is bool b)
                {
                    using (ApplyStyle(output, RichTextBoxThemeStyle.Boolean, ref count))
                    {
                        output.Write(b ? "true" : "false");
                    }

                    return(count);
                }

                if (value is char ch)
                {
                    using (ApplyStyle(output, RichTextBoxThemeStyle.Scalar, ref count))
                    {
                        var charString = SpecialCharsEscaping.Apply(ch.ToString(), ref count);
                        JsonValueFormatter.WriteQuotedJsonString(charString, output);
                    }

                    return(count);
                }

                if (value is DateTime || value is DateTimeOffset)
                {
                    using (ApplyStyle(output, RichTextBoxThemeStyle.Scalar, ref count))
                    {
                        output.Write('\"');
                        output.Write(((IFormattable)value).ToString("O", CultureInfo.InvariantCulture));
                        output.Write('\"');
                    }

                    return(count);
                }
            }

            using (ApplyStyle(output, RichTextBoxThemeStyle.Scalar, ref count))
            {
                var escapedValue = SpecialCharsEscaping.Apply(value.ToString(), ref count);
                JsonValueFormatter.WriteQuotedJsonString(escapedValue, output);
            }

            return(count);
        }