diff --git a/src/Spectre.Console/Rendering/Segment.cs b/src/Spectre.Console/Rendering/Segment.cs
index 0dfed61..35c823d 100644
--- a/src/Spectre.Console/Rendering/Segment.cs
+++ b/src/Spectre.Console/Rendering/Segment.cs
@@ -15,7 +15,7 @@ namespace Spectre.Console.Rendering
///
/// Gets the segment text.
///
- public string Text { get; private set; }
+ public string Text { get; }
///
/// Gets a value indicating whether or not this is an expicit line break
@@ -38,12 +38,12 @@ namespace Spectre.Console.Rendering
///
/// Gets a segment representing a line break.
///
- public static Segment LineBreak => new Segment(Environment.NewLine, Style.Plain, true);
+ public static Segment LineBreak { get; } = new Segment(Environment.NewLine, Style.Plain, true);
///
/// Gets an empty segment.
///
- public static Segment Empty => new Segment(string.Empty, Style.Plain, false);
+ public static Segment Empty { get; } = new Segment(string.Empty, Style.Plain, false);
///
/// Initializes a new instance of the class.
@@ -241,12 +241,10 @@ namespace Spectre.Console.Rendering
// Same style?
if (previous.Style.Equals(segment.Style))
{
- // Modify the content of the previous segment
- previous.Text += segment.Text;
+ previous = new Segment(previous.Text + segment.Text, previous.Style);
}
else
{
- // Push the current one to the results.
result.Add(previous);
previous = segment;
}
@@ -260,6 +258,15 @@ namespace Spectre.Console.Rendering
return result;
}
+ ///
+ /// Clones the segment.
+ ///
+ /// A new segment that's identical to this one.
+ public Segment Clone()
+ {
+ return new Segment(Text, Style);
+ }
+
///
/// Splits an overflowing segment into several new segments.
///