Code/Dependencies/Pixie/Pixie/Markup/PrefixBox.cs
using System;
namespace WasmBox.Pixie.Markup {
/// <summary>
/// A box that prefixes the first line of its contents and then
/// adjusts the margin to align subsequent lines with the start
/// of the prefix.
/// </summary>
public sealed class PrefixBox : MarkupNode {
/// <summary>
/// Creates a prefix-box from a body node.
/// </summary>
/// <param name="prefix">A prefix for the box.</param>
/// <param name="contents">A box's contents.</param>
public PrefixBox(MarkupNode prefix, MarkupNode contents) {
this.Prefix = prefix;
this.Contents = contents;
}
/// <summary>
/// Gets the prefix-box's prefix node.
/// </summary>
/// <returns>The prefix.</returns>
public MarkupNode Prefix { get; private set; }
/// <summary>
/// Gets the prefix-box's body.
/// </summary>
/// <returns>The prefix-box's body.</returns>
public MarkupNode Contents { get; private set; }
/// <inheritdoc/>
public override MarkupNode Fallback =>
new Sequence(Prefix, Contents);
/// <inheritdoc/>
public override MarkupNode Map(Func<MarkupNode, MarkupNode> mapping) {
var newPrefix = mapping(Prefix);
var newContents = mapping(Contents);
if (newPrefix == Prefix
&& newContents == Contents) {
return this;
}
else {
return new PrefixBox(newPrefix, newContents);
}
}
}
}