Dependencies/Pixie/Pixie.Terminal/Render/ColorSpanRenderer.cs
using WasmBox.Pixie.Markup;
using WasmBox.Pixie.Terminal.Devices;

namespace WasmBox.Pixie.Terminal.Render {
    /// <summary>
    /// A renderer for color spans.
    /// </summary>
    public sealed class ColorSpanRenderer : NodeRenderer {
        private ColorSpanRenderer() { }

        /// <summary>
        /// An instance of a color span renderer.
        /// </summary>
        public static readonly ColorSpanRenderer Instance = new ColorSpanRenderer();

        /// <inheritdoc/>
        public override bool CanRender(MarkupNode node) {
            return node is ColorSpan;
        }

        /// <inheritdoc/>
        public override void Render(MarkupNode node, RenderState state) {
            var colorNode = (ColorSpan)node;

            state.Terminal.Style.PushForegroundColor(colorNode.ForegroundColor);
            state.Terminal.Style.PushBackgroundColor(colorNode.BackgroundColor);
            try {
                state.Render(colorNode.Contents);
            }
            finally {
                state.Terminal.Style.PopStyle();
                state.Terminal.Style.PopStyle();
            }
        }
    }
}