Code/Dependencies/Pixie/Pixie/Markup/DegradableText.cs
using System;
namespace WasmBox.Pixie.Markup {
/// <summary>
/// A text node that can be degraded gracefully to a fallback
/// if the original text cannot be rendered.
/// </summary>
public sealed class DegradableText : MarkupNode {
/// <summary>
/// Creates a degradable text node from a main string
/// and a fallback string.
/// </summary>
/// <param name="text">The main string.</param>
/// <param name="fallback">
/// The fallback string, which is rendered when the main string can't be rendered.
/// </param>
public DegradableText(string text, string fallback)
: this(text, new Text(fallback)) { }
/// <summary>
/// Creates a degradable text node from a main string
/// and a fallback node.
/// </summary>
/// <param name="text">The main string.</param>
/// <param name="fallback">
/// The fallback node, which is rendered when the main string can't be rendered.
/// </param>
public DegradableText(string text, MarkupNode fallback) {
this.Contents = text;
this.fallbackNode = fallback;
}
/// <summary>
/// Gets the text this node consists of.
/// </summary>
/// <returns>A text string.</returns>
public string Contents { get; private set; }
private MarkupNode fallbackNode;
/// <inheritdoc/>
public override MarkupNode Fallback => fallbackNode;
/// <inheritdoc/>
public override MarkupNode Map(Func<MarkupNode, MarkupNode> mapping) {
var newFallback = mapping(fallbackNode);
if (newFallback == fallbackNode)
return this;
else
return new DegradableText(Contents, fallbackNode);
}
}
}