示例#1
0
 internal static ContentView Create(object content, TextSpanFormatter formatter)
 {
     if (content == null)
     {
         return(new ContentView(TextSpan.Empty()));
     }
     return(CreateView((dynamic)content, formatter));
 }
        public void When_formatting_null_values_then_empty_span_is_returned()
        {
            var formatter = new TextSpanFormatter();

            var span = formatter.Format(null);

            span.Should().Be(TextSpan.Empty());
        }
        private void Render(TextSpan span, Region region = null)
        {
            if (span == null)
            {
                span = TextSpan.Empty();
            }
            else if (_resetAfterRender)
            {
                span = new ContainerSpan(
                    span,
                    ForegroundColorSpan.Reset(),
                    BackgroundColorSpan.Reset());
            }

            if (_mode == OutputMode.Auto)
            {
                _mode = _terminal?.DetectOutputMode() ??
                        OutputMode.PlainText;
            }


            TextSpanVisitor visitor;

            switch (_mode)
            {
            case OutputMode.NonAnsi:
                visitor = new NonAnsiRenderingSpanVisitor(
                    _terminal,
                    region);
                break;

            case OutputMode.Ansi:
                visitor = new AnsiRenderingSpanVisitor(
                    _console,
                    region);
                break;

            case OutputMode.PlainText:
                visitor = new FileRenderingSpanVisitor(
                    _console.Out,
                    new Region(region.Left,
                               region.Top,
                               region.Width,
                               region.Height,
                               false));
                break;

            default:
                throw new NotSupportedException();
            }

            visitor.Visit(span);
        }
        public void Empty_strings_are_returned_as_empty_spans()
        {
            var formatter = new TextSpanFormatter();

            var span = formatter.ParseToSpan(
                $"{Ansi.Color.Foreground.Red}normal{Ansi.Color.Foreground.Default:a}"
                );

            var containerSpan = span.Should().BeOfType <ContainerSpan>().Subject;

            containerSpan
            .Should()
            .BeEquivalentTo(
                new ContainerSpan(
                    TextSpan.Empty(),
                    new ContentSpan("normal"),
                    TextSpan.Empty()
                    ),
                options =>
                options.WithStrictOrdering().Excluding(s => s.Parent).Excluding(s => s.Root)
                );
        }
示例#5
0
        public override void Render(ConsoleRenderer renderer, Region region)
        {
            Size[,] sizes = GetGridSizes(renderer, new Size(region.Width, region.Height));

            int top = region.Top;

            for (int row = 0; row < _rows.Count; row++)
            {
                int left         = region.Left;
                int maxRowHeight = 0;
                for (int column = 0; column < _columns.Count; column++)
                {
                    var paddingWidth = GetColumnPaddingWidth(column);
                    if (ChildLocations[column, row] is not {
                    } child ||
                        sizes[column, row].Width - paddingWidth <= 0 ||
                        sizes[column, row].Height <= 0)
                    {
                        //child no view or no space left to render
                        continue;
                    }

                    var contentSize = new Size(sizes[column, row].Width - paddingWidth, sizes[column, row].Height);
                    child.Render(renderer, new Region(left, top, contentSize));

                    if (paddingWidth > 0)
                    {
                        // Explicit render the space between the columns to improve rendering in plain text
                        var paddingSize = new Size(paddingWidth, sizes[column, row].Height);
                        renderer.RenderToRegion(TextSpan.Empty(), new Region(left + contentSize.Width, top, paddingSize));
                    }

                    left        += sizes[column, row].Width;
                    maxRowHeight = Math.Max(maxRowHeight, sizes[column, row].Height);
                }
                top += maxRowHeight;
            }
        }