diff --git a/Directory.Packages.props b/Directory.Packages.props
index d62a1d298..2fdb4633e 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -18,7 +18,7 @@
-
+
diff --git a/Examples/UICatalog/Scenarios/CombiningMarks.cs b/Examples/UICatalog/Scenarios/CombiningMarks.cs
index 47b8dfbc7..62181c500 100644
--- a/Examples/UICatalog/Scenarios/CombiningMarks.cs
+++ b/Examples/UICatalog/Scenarios/CombiningMarks.cs
@@ -16,7 +16,8 @@ public class CombiningMarks : Scenario
Application.Current!.SetNeedsDraw ();
var i = -1;
- top.AddStr ("Terminal.Gui only supports combining marks that normalize. See Issue #2616.");
+ top.Move (0, ++i);
+ top.AddStr ("Terminal.Gui supports all combining sequences that can be rendered as an unique grapheme.");
top.Move (0, ++i);
top.AddStr ("\u0301<- \"\\u0301\" using AddStr.");
top.Move (0, ++i);
@@ -38,7 +39,7 @@ public class CombiningMarks : Scenario
top.AddRune ('\u0301');
top.AddRune ('\u0328');
top.AddRune (']');
- top.AddStr ("<- \"[a\\u0301\\u0301\\u0328]\" using AddRune for each.");
+ top.AddStr ("<- \"[a\\u0301\\u0301\\u0328]\" using AddRune for each. Avoid use AddRune for combining sequences because may result with empty blocks at end.");
top.Move (0, ++i);
top.AddStr ("[a\u0301\u0301\u0328]<- \"[a\\u0301\\u0301\\u0328]\" using AddStr.");
top.Move (0, ++i);
@@ -82,6 +83,16 @@ public class CombiningMarks : Scenario
top.AddStr ("[\U0001F468\U0001F469\U0001F9D2]<- \"[\\U0001F468\\U0001F469\\U0001F9D2]\" using AddStr.");
top.Move (0, ++i);
top.AddStr ("[\U0001F468\u200D\U0001F469\u200D\U0001F9D2]<- \"[\\U0001F468\\u200D\\U0001F469\\u200D\\U0001F9D2]\" using AddStr.");
+ top.Move (0, ++i);
+ top.AddStr ("[\U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466]<- \"[\\U0001F468\\u200D\\U0001F469\\u200D\\U0001F467\\u200D\\U0001F466]\" using AddStr.");
+ top.Move (0, ++i);
+ top.AddStr ("[\u0e32\u0e33]<- \"[\\u0e32\\u0e33]\" using AddStr.");
+ top.Move (0, ++i);
+ top.AddStr ("[\U0001F469\u200D\u2764\uFE0F\u200D\U0001F48B\u200D\U0001F468]<- \"[\\U0001F469\\u200D\\u2764\\uFE0F\\u200D\\U0001F48B\\u200D\\U0001F468]\" using AddStr.");
+ top.Move (0, ++i);
+ top.AddStr ("[\u0061\uFE20\u0065\uFE21]<- \"[\\u0061\\uFE20\\u0065\\uFE21]\" using AddStr.");
+ top.Move (0, ++i);
+ top.AddStr ("[\u1100\uD7B0]<- \"[\\u1100\\uD7B0]\" using AddStr.");
};
Application.Run (top);
diff --git a/Examples/UICatalog/Scenarios/LineDrawing.cs b/Examples/UICatalog/Scenarios/LineDrawing.cs
index cbc8dd27b..217aea27b 100644
--- a/Examples/UICatalog/Scenarios/LineDrawing.cs
+++ b/Examples/UICatalog/Scenarios/LineDrawing.cs
@@ -284,7 +284,7 @@ public class DrawingArea : View
SetCurrentAttribute (c.Value.Value.Attribute ?? GetAttributeForRole (VisualRole.Normal));
// TODO: #2616 - Support combining sequences that don't normalize
- AddRune (c.Key.X, c.Key.Y, c.Value.Value.Rune);
+ AddStr (c.Key.X, c.Key.Y, c.Value.Value.Grapheme);
}
}
}
diff --git a/Examples/UICatalog/Scenarios/Sliders.cs b/Examples/UICatalog/Scenarios/Sliders.cs
index fae50c015..8d954d100 100644
--- a/Examples/UICatalog/Scenarios/Sliders.cs
+++ b/Examples/UICatalog/Scenarios/Sliders.cs
@@ -86,17 +86,17 @@ public class Sliders : Scenario
{
if (single.Orientation == Orientation.Horizontal)
{
- single.Style.SpaceChar = new () { Rune = Glyphs.HLine };
- single.Style.OptionChar = new () { Rune = Glyphs.HLine };
+ single.Style.SpaceChar = new () { Grapheme = Glyphs.HLine.ToString () };
+ single.Style.OptionChar = new () { Grapheme = Glyphs.HLine.ToString () };
}
else
{
- single.Style.SpaceChar = new () { Rune = Glyphs.VLine };
- single.Style.OptionChar = new () { Rune = Glyphs.VLine };
+ single.Style.SpaceChar = new () { Grapheme = Glyphs.VLine.ToString () };
+ single.Style.OptionChar = new () { Grapheme = Glyphs.VLine.ToString () };
}
};
- single.Style.SetChar = new () { Rune = Glyphs.ContinuousMeterSegment };
- single.Style.DragChar = new () { Rune = Glyphs.ContinuousMeterSegment };
+ single.Style.SetChar = new () { Grapheme = Glyphs.ContinuousMeterSegment.ToString () };
+ single.Style.DragChar = new () { Grapheme = Glyphs.ContinuousMeterSegment.ToString () };
v.Add (single);
@@ -257,7 +257,7 @@ public class Sliders : Scenario
{
s.Orientation = Orientation.Horizontal;
- s.Style.SpaceChar = new () { Rune = Glyphs.HLine };
+ s.Style.SpaceChar = new () { Grapheme = Glyphs.HLine.ToString () };
if (prev == null)
{
@@ -275,7 +275,7 @@ public class Sliders : Scenario
{
s.Orientation = Orientation.Vertical;
- s.Style.SpaceChar = new () { Rune = Glyphs.VLine };
+ s.Style.SpaceChar = new () { Grapheme = Glyphs.VLine.ToString () };
if (prev == null)
{
diff --git a/Examples/UICatalog/Scenarios/SyntaxHighlighting.cs b/Examples/UICatalog/Scenarios/SyntaxHighlighting.cs
index 7b0c05462..ad9f93460 100644
--- a/Examples/UICatalog/Scenarios/SyntaxHighlighting.cs
+++ b/Examples/UICatalog/Scenarios/SyntaxHighlighting.cs
@@ -152,12 +152,12 @@ public class SyntaxHighlighting : Scenario
),
null,
new (
- "_Load Rune Cells",
+ "_Load Text Cells",
"",
() => ApplyLoadCells ()
),
new (
- "_Save Rune Cells",
+ "_Save Text Cells",
"",
() => SaveCells ()
),
@@ -240,12 +240,9 @@ public class SyntaxHighlighting : Scenario
{
string csName = color.Key;
- foreach (Rune rune in csName.EnumerateRunes ())
- {
- cells.Add (new () { Rune = rune, Attribute = color.Value.Normal });
- }
+ cells.AddRange (Cell.ToCellList (csName, color.Value.Normal));
- cells.Add (new () { Rune = (Rune)'\n', Attribute = color.Value.Focus });
+ cells.Add (new () { Grapheme = "\n", Attribute = color.Value.Focus });
}
if (File.Exists (_path))
diff --git a/Terminal.Gui/Drawing/Cell.cs b/Terminal.Gui/Drawing/Cell.cs
index 2fa98bef1..f7da577ad 100644
--- a/Terminal.Gui/Drawing/Cell.cs
+++ b/Terminal.Gui/Drawing/Cell.cs
@@ -1,80 +1,108 @@
-
namespace Terminal.Gui.Drawing;
///
/// Represents a single row/column in a Terminal.Gui rendering surface (e.g. and
/// ).
///
-public record struct Cell (Attribute? Attribute = null, bool IsDirty = false, Rune Rune = default)
+public record struct Cell (Attribute? Attribute = null, bool IsDirty = false, string Grapheme = "")
{
/// The attributes to use when drawing the Glyph.
public Attribute? Attribute { get; set; } = Attribute;
///
- /// Gets or sets a value indicating whether this has been modified since the
+ /// Gets or sets a value indicating whether this has been modified since the
/// last time it was drawn.
///
public bool IsDirty { get; set; } = IsDirty;
- private Rune _rune = Rune;
+ private string _grapheme = Grapheme;
- /// The character to display. If is , then is ignored.
- public Rune Rune
+ ///
+ /// The single grapheme cluster to display from this cell. If is or
+ /// , then is ignored.
+ ///
+ public string Grapheme
{
- get => _rune;
+ readonly get => _grapheme;
set
{
- _combiningMarks?.Clear ();
- _rune = value;
+ if (GraphemeHelper.GetGraphemes(value).ToArray().Length > 1)
+ {
+ throw new InvalidOperationException ($"Only a single {nameof (Grapheme)} cluster is allowed per Cell.");
+ }
+
+ if (!string.IsNullOrEmpty (value) && value.Length == 1 && char.IsSurrogate (value [0]))
+ {
+ throw new ArgumentException ($"Only valid Unicode scalar values are allowed in a single {nameof (Grapheme)} cluster.");
+ }
+
+ try
+ {
+ _grapheme = !string.IsNullOrEmpty (value) && !value.IsNormalized (NormalizationForm.FormC)
+ ? value.Normalize (NormalizationForm.FormC)
+ : value;
+ }
+ catch (ArgumentException)
+ {
+ // leave text unnormalized
+ _grapheme = value;
+ }
}
}
- private List? _combiningMarks;
-
///
- /// The combining marks for that when combined makes this Cell a combining sequence. If
- /// empty, then is ignored.
+ /// The rune for or runes for that when combined makes this Cell a combining sequence.
///
///
- /// Only valid in the rare case where is a combining sequence that could not be normalized to a
- /// single Rune.
+ /// In the case where has more than one rune it is a combining sequence that is normalized to a
+ /// single Text which may occupies 1 or 2 columns.
///
- internal IReadOnlyList CombiningMarks
- {
- // PERFORMANCE: Downside of the interface return type is that List struct enumerator cannot be utilized, i.e. enumerator is allocated.
- // If enumeration is used heavily in the future then might be better to expose the List Enumerator directly via separate mechanism.
- get
- {
- // Avoid unnecessary list allocation.
- if (_combiningMarks == null)
- {
- return Array.Empty ();
- }
- return _combiningMarks;
- }
- }
-
- ///
- /// Adds combining mark to the cell.
- ///
- /// The combining mark to add to the cell.
- internal void AddCombiningMark (Rune combiningMark)
- {
- _combiningMarks ??= [];
- _combiningMarks.Add (combiningMark);
- }
-
- ///
- /// Clears combining marks of the cell.
- ///
- internal void ClearCombiningMarks ()
- {
- _combiningMarks?.Clear ();
- }
+ public IReadOnlyList Runes => string.IsNullOrEmpty (Grapheme) ? [] : Grapheme.EnumerateRunes ().ToList ();
///
- public override string ToString () { return $"['{Rune}':{Attribute}]"; }
+ public override string ToString ()
+ {
+ string visibleText = EscapeControlAndInvisible (Grapheme);
+
+ return $"[\"{visibleText}\":{Attribute}]";
+ }
+
+ private static string EscapeControlAndInvisible (string text)
+ {
+ if (string.IsNullOrEmpty (text))
+ {
+ return "";
+ }
+
+ var sb = new StringBuilder ();
+
+ foreach (var rune in text.EnumerateRunes ())
+ {
+ switch (rune.Value)
+ {
+ case '\0': sb.Append ("␀"); break;
+ case '\t': sb.Append ("\\t"); break;
+ case '\r': sb.Append ("\\r"); break;
+ case '\n': sb.Append ("\\n"); break;
+ case '\f': sb.Append ("\\f"); break;
+ case '\v': sb.Append ("\\v"); break;
+ default:
+ if (char.IsControl ((char)rune.Value))
+ {
+ // show as \uXXXX
+ sb.Append ($"\\u{rune.Value:X4}");
+ }
+ else
+ {
+ sb.Append (rune);
+ }
+ break;
+ }
+ }
+
+ return sb.ToString ();
+ }
/// Converts the string into a .
/// The string to convert.
@@ -82,12 +110,8 @@ public record struct Cell (Attribute? Attribute = null, bool IsDirty = false, Ru
///
public static List ToCellList (string str, Attribute? attribute = null)
{
- List cells = new ();
-
- foreach (Rune rune in str.EnumerateRunes ())
- {
- cells.Add (new () { Rune = rune, Attribute = attribute });
- }
+ List cells = [];
+ cells.AddRange (GraphemeHelper.GetGraphemes (str).Select (grapheme => new Cell { Grapheme = grapheme, Attribute = attribute }));
return cells;
}
@@ -100,9 +124,7 @@ public record struct Cell (Attribute? Attribute = null, bool IsDirty = false, Ru
/// A for each line.
public static List> StringToLinesOfCells (string content, Attribute? attribute = null)
{
- List cells = content.EnumerateRunes ()
- .Select (x => new Cell { Rune = x, Attribute = attribute })
- .ToList ();
+ List cells = ToCellList (content, attribute);
return SplitNewLines (cells);
}
@@ -112,14 +134,14 @@ public record struct Cell (Attribute? Attribute = null, bool IsDirty = false, Ru
///
public static string ToString (IEnumerable cells)
{
- var str = string.Empty;
+ StringBuilder sb = new ();
foreach (Cell cell in cells)
{
- str += cell.Rune.ToString ();
+ sb.Append (cell.Grapheme);
}
- return str;
+ return sb.ToString ();
}
/// Converts a generic collection into a string.
@@ -147,26 +169,19 @@ public record struct Cell (Attribute? Attribute = null, bool IsDirty = false, Ru
internal static List StringToCells (string str, Attribute? attribute = null)
{
- List cells = [];
-
- foreach (Rune rune in str.ToRunes ())
- {
- cells.Add (new () { Rune = rune, Attribute = attribute });
- }
-
- return cells;
+ return ToCellList (str, attribute);
}
- internal static List ToCells (IEnumerable runes, Attribute? attribute = null)
+ internal static List ToCells (IEnumerable strings, Attribute? attribute = null)
{
- List cells = new ();
+ StringBuilder sb = new ();
- foreach (Rune rune in runes)
+ foreach (string str in strings)
{
- cells.Add (new () { Rune = rune, Attribute = attribute });
+ sb.Append (str);
}
- return cells;
+ return ToCellList (sb.ToString (), attribute);
}
private static List> SplitNewLines (List cells)
@@ -179,14 +194,15 @@ public record struct Cell (Attribute? Attribute = null, bool IsDirty = false, Ru
// ASCII code 10 = Line Feed.
for (; i < cells.Count; i++)
{
- if (cells [i].Rune.Value == 13)
+ if (cells [i].Grapheme.Length == 1 && cells [i].Grapheme [0] == 13)
{
hasCR = true;
continue;
}
- if (cells [i].Rune.Value == 10)
+ if ((cells [i].Grapheme.Length == 1 && cells [i].Grapheme [0] == 10)
+ || cells [i].Grapheme == "\r\n")
{
if (i - start > 0)
{
diff --git a/Terminal.Gui/Drawing/GraphemeHelper.cs b/Terminal.Gui/Drawing/GraphemeHelper.cs
new file mode 100644
index 000000000..4ae00148c
--- /dev/null
+++ b/Terminal.Gui/Drawing/GraphemeHelper.cs
@@ -0,0 +1,49 @@
+using System.Globalization;
+
+namespace Terminal.Gui.Drawing;
+
+///
+/// Provides utility methods for enumerating Unicode grapheme clusters (user-perceived characters)
+/// in a string. A grapheme cluster may consist of one or more values,
+/// including combining marks or zero-width joiner (ZWJ) sequences such as emoji family groups.
+///
+///
+///
+/// This helper uses to enumerate
+/// text elements according to the Unicode Standard Annex #29 (UAX #29) rules for
+/// extended grapheme clusters.
+///
+///
+/// On legacy Windows consoles (e.g., cmd.exe, conhost.exe), complex grapheme
+/// sequences such as ZWJ emoji or combining marks may not render correctly, even though
+/// the underlying string data is valid.
+///
+///
+/// For most accurate visual rendering, prefer modern terminals such as Windows Terminal
+/// or Linux-based terminals with full Unicode and font support.
+///
+///
+public static class GraphemeHelper
+{
+ ///
+ /// Enumerates extended grapheme clusters from a string.
+ /// Handles surrogate pairs, combining marks, and basic ZWJ sequences.
+ /// Safe for legacy consoles; memory representation is correct.
+ ///
+ public static IEnumerable GetGraphemes (string text)
+ {
+ if (string.IsNullOrEmpty (text))
+ {
+ yield break;
+ }
+
+ TextElementEnumerator enumerator = StringInfo.GetTextElementEnumerator (text);
+
+ while (enumerator.MoveNext ())
+ {
+ string element = enumerator.GetTextElement ();
+
+ yield return element;
+ }
+ }
+}
diff --git a/Terminal.Gui/Drawing/LineCanvas/LineCanvas.cs b/Terminal.Gui/Drawing/LineCanvas/LineCanvas.cs
index c426b6896..763467096 100644
--- a/Terminal.Gui/Drawing/LineCanvas/LineCanvas.cs
+++ b/Terminal.Gui/Drawing/LineCanvas/LineCanvas.cs
@@ -173,7 +173,7 @@ public class LineCanvas : IDisposable
intersectionsBufferList.Clear ();
foreach (var line in _lines)
{
- if (line.Intersects (x, y) is IntersectionDefinition intersect)
+ if (line.Intersects (x, y) is { } intersect)
{
intersectionsBufferList.Add (intersect);
}
@@ -217,9 +217,8 @@ public class LineCanvas : IDisposable
for (int x = inArea.X; x < inArea.X + inArea.Width; x++)
{
IntersectionDefinition [] intersects = _lines
- // ! nulls are filtered out by the next Where filter
- .Select (l => l.Intersects (x, y)!)
- .Where (i => i is not null)
+ .Select (l => l.Intersects (x, y))
+ .OfType () // automatically filters nulls and casts
.ToArray ();
Rune? rune = GetRuneForIntersects (intersects);
@@ -413,7 +412,7 @@ public class LineCanvas : IDisposable
if (rune.HasValue)
{
- cell.Rune = rune.Value;
+ cell.Grapheme = rune.ToString ()!;
}
cell.Attribute = GetAttributeForIntersects (intersects);
diff --git a/Terminal.Gui/Drivers/DriverImpl.cs b/Terminal.Gui/Drivers/DriverImpl.cs
index ee125c143..9aebea3dd 100644
--- a/Terminal.Gui/Drivers/DriverImpl.cs
+++ b/Terminal.Gui/Drivers/DriverImpl.cs
@@ -253,8 +253,16 @@ internal class DriverImpl : IDriver
///
public bool IsRuneSupported (Rune rune) => Rune.IsValid (rune.Value);
- ///
- public bool IsValidLocation (Rune rune, int col, int row) => OutputBuffer.IsValidLocation (rune, col, row);
+ /// Tests whether the specified coordinate are valid for drawing the specified Text.
+ /// Used to determine if one or two columns are required.
+ /// The column.
+ /// The row.
+ ///
+ /// if the coordinate is outside the screen bounds or outside of
+ /// .
+ /// otherwise.
+ ///
+ public bool IsValidLocation (string text, int col, int row) { return OutputBuffer.IsValidLocation (text, col, row); }
///
public void Move (int col, int row) { OutputBuffer.Move (col, row); }
@@ -379,26 +387,14 @@ internal class DriverImpl : IDriver
{
for (var c = 0; c < Cols; c++)
{
- Rune rune = contents [r, c].Rune;
+ string text = contents [r, c].Grapheme;
- if (rune.DecodeSurrogatePair (out char []? sp))
- {
- sb.Append (sp);
- }
- else
- {
- sb.Append ((char)rune.Value);
- }
+ sb.Append (text);
- if (rune.GetColumns () > 1)
+ if (text.GetColumns () > 1)
{
c++;
}
-
- // See Issue #2616
- //foreach (var combMark in contents [r, c].CombiningMarks) {
- // sb.Append ((char)combMark.Value);
- //}
}
sb.AppendLine ();
diff --git a/Terminal.Gui/Drivers/IDriver.cs b/Terminal.Gui/Drivers/IDriver.cs
index 090c192a4..8616d8edf 100644
--- a/Terminal.Gui/Drivers/IDriver.cs
+++ b/Terminal.Gui/Drivers/IDriver.cs
@@ -124,8 +124,8 @@ public interface IDriver
///
bool IsRuneSupported (Rune rune);
- /// Tests whether the specified coordinate are valid for drawing the specified Rune.
- /// Used to determine if one or two columns are required.
+ /// Tests whether the specified coordinate are valid for drawing the specified Text.
+ /// Used to determine if one or two columns are required.
/// The column.
/// The row.
///
@@ -133,7 +133,7 @@ public interface IDriver
/// .
/// otherwise.
///
- bool IsValidLocation (Rune rune, int col, int row);
+ bool IsValidLocation (string text, int col, int row);
///
/// Updates and to the specified column and row in
diff --git a/Terminal.Gui/Drivers/IOutputBuffer.cs b/Terminal.Gui/Drivers/IOutputBuffer.cs
index 387fde46c..3344d0ba8 100644
--- a/Terminal.Gui/Drivers/IOutputBuffer.cs
+++ b/Terminal.Gui/Drivers/IOutputBuffer.cs
@@ -84,15 +84,15 @@ public interface IOutputBuffer
void FillRect (Rectangle rect, char rune);
///
- /// Tests whether the specified coordinate is valid for drawing the specified Rune.
+ /// Tests whether the specified coordinate is valid for drawing the specified Text.
///
- /// Used to determine if one or two columns are required.
+ /// Used to determine if one or two columns are required.
/// The column.
/// The row.
///
- /// True if the coordinate is valid for the Rune; false otherwise.
+ /// True if the coordinate is valid for the Text; false otherwise.
///
- bool IsValidLocation (Rune rune, int col, int row);
+ bool IsValidLocation (string text, int col, int row);
///
/// The first cell index on left of screen - basically always 0.
diff --git a/Terminal.Gui/Drivers/OutputBase.cs b/Terminal.Gui/Drivers/OutputBase.cs
index ca8b92c01..6c10fad0b 100644
--- a/Terminal.Gui/Drivers/OutputBase.cs
+++ b/Terminal.Gui/Drivers/OutputBase.cs
@@ -76,25 +76,6 @@ public abstract class OutputBase
outputWidth++;
- // Handle special cases that AppendCellAnsi doesn't cover
- Rune rune = cell.Rune;
- if (cell.CombiningMarks.Count > 0)
- {
- // AtlasEngine does not support NON-NORMALIZED combining marks in a way
- // compatible with the driver architecture. Any CMs (except in the first col)
- // are correctly combined with the base char, but are ALSO treated as 1 column
- // width codepoints E.g. `echo "[e`u{0301}`u{0301}]"` will output `[é ]`.
- //
- // For now, we just ignore the list of CMs.
- //foreach (var combMark in Contents [row, col].CombiningMarks) {
- // output.Append (combMark);
- }
- else if (rune.IsSurrogatePair () && rune.GetColumns () < 2)
- {
- WriteToConsole (output, ref lastCol, row, ref outputWidth);
- SetCursorPositionImpl (col - 1, row);
- }
-
buffer.Contents [row, col].IsDirty = false;
}
}
@@ -216,16 +197,12 @@ public abstract class OutputBase
redrawTextStyle = attribute.Value.Style;
}
- // Add the character
- const int MAX_CHARS_PER_RUNE = 2;
- Span runeBuffer = stackalloc char [MAX_CHARS_PER_RUNE];
- Rune rune = cell.Rune;
- int runeCharsWritten = rune.EncodeToUtf16 (runeBuffer);
- ReadOnlySpan runeChars = runeBuffer [..runeCharsWritten];
- output.Append (runeChars);
+ // Add the grapheme
+ string grapheme = cell.Grapheme;
+ output.Append (grapheme);
- // Handle wide characters
- if (rune.GetColumns () > 1 && currentCol + 1 < maxCol)
+ // Handle wide grapheme
+ if (grapheme.GetColumns () > 1 && currentCol + 1 < maxCol)
{
currentCol++; // Skip next cell for wide character
}
diff --git a/Terminal.Gui/Drivers/OutputBufferImpl.cs b/Terminal.Gui/Drivers/OutputBufferImpl.cs
index d12eb7991..30f112b4b 100644
--- a/Terminal.Gui/Drivers/OutputBufferImpl.cs
+++ b/Terminal.Gui/Drivers/OutputBufferImpl.cs
@@ -65,7 +65,9 @@ public class OutputBufferImpl : IOutputBuffer
/// The topmost row in the terminal.
public virtual int Top { get; set; } = 0;
- ///
+ ///
+ /// Indicates which lines have been modified and need to be redrawn.
+ ///
public bool [] DirtyLines { get; set; } = [];
// QUESTION: When non-full screen apps are supported, will this represent the app size, or will that be in Application?
@@ -112,178 +114,8 @@ public class OutputBufferImpl : IOutputBuffer
/// will be added instead.
///
///
- /// Rune to add.
- public void AddRune (Rune rune)
- {
- int runeWidth = -1;
- bool validLocation = IsValidLocation (rune, Col, Row);
-
- if (Contents is null)
- {
- return;
- }
-
- Clip ??= new (Screen);
-
- Rectangle clipRect = Clip!.GetBounds ();
-
- if (validLocation)
- {
- rune = rune.MakePrintable ();
- runeWidth = rune.GetColumns ();
-
- lock (Contents)
- {
- if (runeWidth == 0 && rune.IsCombiningMark ())
- {
- // AtlasEngine does not support NON-NORMALIZED combining marks in a way
- // compatible with the driver architecture. Any CMs (except in the first col)
- // are correctly combined with the base char, but are ALSO treated as 1 column
- // width codepoints E.g. `echo "[e`u{0301}`u{0301}]"` will output `[é ]`.
- //
- // Until this is addressed (see Issue #), we do our best by
- // a) Attempting to normalize any CM with the base char to it's left
- // b) Ignoring any CMs that don't normalize
- if (Col > 0)
- {
- if (Contents [Row, Col - 1].CombiningMarks.Count > 0)
- {
- // Just add this mark to the list
- Contents [Row, Col - 1].AddCombiningMark (rune);
-
- // Ignore. Don't move to next column (let the driver figure out what to do).
- }
- else
- {
- // Attempt to normalize the cell to our left combined with this mark
- string combined = Contents [Row, Col - 1].Rune + rune.ToString ();
-
- // Normalize to Form C (Canonical Composition)
- string normalized = combined.Normalize (NormalizationForm.FormC);
-
- if (normalized.Length == 1)
- {
- // It normalized! We can just set the Cell to the left with the
- // normalized codepoint
- Contents [Row, Col - 1].Rune = (Rune)normalized [0];
-
- // Ignore. Don't move to next column because we're already there
- }
- else
- {
- // It didn't normalize. Add it to the Cell to left's CM list
- Contents [Row, Col - 1].AddCombiningMark (rune);
-
- // Ignore. Don't move to next column (let the driver figure out what to do).
- }
- }
-
- Contents [Row, Col - 1].Attribute = CurrentAttribute;
- Contents [Row, Col - 1].IsDirty = true;
- }
- else
- {
- // Most drivers will render a combining mark at col 0 as the mark
- Contents [Row, Col].Rune = rune;
- Contents [Row, Col].Attribute = CurrentAttribute;
- Contents [Row, Col].IsDirty = true;
- Col++;
- }
- }
- else
- {
- Contents [Row, Col].Attribute = CurrentAttribute;
- Contents [Row, Col].IsDirty = true;
-
- if (Col > 0)
- {
- // Check if cell to left has a wide glyph
- if (Contents [Row, Col - 1].Rune.GetColumns () > 1)
- {
- // Invalidate cell to left
- Contents [Row, Col - 1].Rune = Rune.ReplacementChar;
- Contents [Row, Col - 1].IsDirty = true;
- }
- }
-
- if (runeWidth < 1)
- {
- Contents [Row, Col].Rune = Rune.ReplacementChar;
- }
- else if (runeWidth == 1)
- {
- Contents [Row, Col].Rune = rune;
-
- if (Col < clipRect.Right - 1)
- {
- Contents [Row, Col + 1].IsDirty = true;
- }
- }
- else if (runeWidth == 2)
- {
- if (!Clip.Contains (Col + 1, Row))
- {
- // We're at the right edge of the clip, so we can't display a wide character.
- // TODO: Figure out if it is better to show a replacement character or ' '
- Contents [Row, Col].Rune = Rune.ReplacementChar;
- }
- else if (!Clip.Contains (Col, Row))
- {
- // Our 1st column is outside the clip, so we can't display a wide character.
- Contents [Row, Col + 1].Rune = Rune.ReplacementChar;
- }
- else
- {
- Contents [Row, Col].Rune = rune;
-
- if (Col < clipRect.Right - 1)
- {
- // Invalidate cell to right so that it doesn't get drawn
- // TODO: Figure out if it is better to show a replacement character or ' '
- Contents [Row, Col + 1].Rune = Rune.ReplacementChar;
- Contents [Row, Col + 1].IsDirty = true;
- }
- }
- }
- else
- {
- // This is a non-spacing character, so we don't need to do anything
- Contents [Row, Col].Rune = (Rune)' ';
- Contents [Row, Col].IsDirty = false;
- }
-
- DirtyLines [Row] = true;
- }
- }
- }
-
- if (runeWidth is < 0 or > 0)
- {
- Col++;
- }
-
- if (runeWidth > 1)
- {
- Debug.Assert (runeWidth <= 2);
-
- if (validLocation && Col < clipRect.Right)
- {
- lock (Contents!)
- {
- // This is a double-width character, and we are not at the end of the line.
- // Col now points to the second column of the character. Ensure it doesn't
- // Get rendered.
- Contents [Row, Col].IsDirty = false;
- Contents [Row, Col].Attribute = CurrentAttribute;
-
- // TODO: Determine if we should wipe this out (for now now)
- //Contents [Row, Col].Rune = (Rune)' ';
- }
- }
-
- Col++;
- }
- }
+ /// Text to add.
+ public void AddRune (Rune rune) { AddStr (rune.ToString ()); }
///
/// Adds the specified to the display at the current cursor position. This method is a
@@ -296,7 +128,7 @@ public class OutputBufferImpl : IOutputBuffer
///
///
/// When the method returns, will be incremented by the number of columns
- /// required, unless the new column value is outside of the or screen
+ /// required, unless the new column value is outside the or screen
/// dimensions defined by .
///
/// If requires more columns than are available, the output will be clipped.
@@ -304,11 +136,112 @@ public class OutputBufferImpl : IOutputBuffer
/// String.
public void AddStr (string str)
{
- List runes = str.EnumerateRunes ().ToList ();
-
- for (var i = 0; i < runes.Count; i++)
+ foreach (string grapheme in GraphemeHelper.GetGraphemes (str))
{
- AddRune (runes [i]);
+ string text = grapheme;
+
+ int textWidth = -1;
+ bool validLocation = IsValidLocation (text, Col, Row);
+
+ if (Contents is null)
+ {
+ return;
+ }
+
+ Clip ??= new (Screen);
+
+ Rectangle clipRect = Clip!.GetBounds ();
+
+ if (validLocation)
+ {
+ text = text.MakePrintable ();
+ textWidth = text.GetColumns ();
+
+ lock (Contents)
+ {
+ Contents [Row, Col].Attribute = CurrentAttribute;
+ Contents [Row, Col].IsDirty = true;
+
+ if (Col > 0)
+ {
+ // Check if cell to left has a wide glyph
+ if (Contents [Row, Col - 1].Grapheme.GetColumns () > 1)
+ {
+ // Invalidate cell to left
+ Contents [Row, Col - 1].Grapheme = Rune.ReplacementChar.ToString ();
+ Contents [Row, Col - 1].IsDirty = true;
+ }
+ }
+
+ if (textWidth is 0 or 1)
+ {
+ Contents [Row, Col].Grapheme = text;
+
+ if (Col < clipRect.Right - 1)
+ {
+ Contents [Row, Col + 1].IsDirty = true;
+ }
+ }
+ else if (textWidth == 2)
+ {
+ if (!Clip.Contains (Col + 1, Row))
+ {
+ // We're at the right edge of the clip, so we can't display a wide character.
+ // TODO: Figure out if it is better to show a replacement character or ' '
+ Contents [Row, Col].Grapheme = Rune.ReplacementChar.ToString ();
+ }
+ else if (!Clip.Contains (Col, Row))
+ {
+ // Our 1st column is outside the clip, so we can't display a wide character.
+ Contents [Row, Col + 1].Grapheme = Rune.ReplacementChar.ToString ();
+ }
+ else
+ {
+ Contents [Row, Col].Grapheme = text;
+
+ if (Col < clipRect.Right - 1)
+ {
+ // Invalidate cell to right so that it doesn't get drawn
+ // TODO: Figure out if it is better to show a replacement character or ' '
+ Contents [Row, Col + 1].Grapheme = Rune.ReplacementChar.ToString ();
+ Contents [Row, Col + 1].IsDirty = true;
+ }
+ }
+ }
+ else
+ {
+ // This is a non-spacing character, so we don't need to do anything
+ Contents [Row, Col].Grapheme = " ";
+ Contents [Row, Col].IsDirty = false;
+ }
+
+ DirtyLines [Row] = true;
+ }
+ }
+
+ Col++;
+
+ if (textWidth > 1)
+ {
+ Debug.Assert (textWidth <= 2);
+
+ if (validLocation && Col < clipRect.Right)
+ {
+ lock (Contents!)
+ {
+ // This is a double-width character, and we are not at the end of the line.
+ // Col now points to the second column of the character. Ensure it doesn't
+ // Get rendered.
+ Contents [Row, Col].IsDirty = false;
+ Contents [Row, Col].Attribute = CurrentAttribute;
+
+ // TODO: Determine if we should wipe this out (for now now)
+ //Contents [Row, Col].Text = (Text)' ';
+ }
+ }
+
+ Col++;
+ }
}
}
@@ -331,7 +264,7 @@ public class OutputBufferImpl : IOutputBuffer
{
Contents [row, c] = new ()
{
- Rune = (Rune)' ',
+ Grapheme = " ",
Attribute = new Attribute (Color.White, Color.Black),
IsDirty = true
};
@@ -345,22 +278,19 @@ public class OutputBufferImpl : IOutputBuffer
//ClearedContents?.Invoke (this, EventArgs.Empty);
}
- /// Tests whether the specified coordinate are valid for drawing the specified Rune.
- /// Used to determine if one or two columns are required.
+ /// Tests whether the specified coordinate are valid for drawing the specified Text.
+ /// Used to determine if one or two columns are required.
/// The column.
/// The row.
///
/// if the coordinate is outside the screen bounds or outside of .
/// otherwise.
///
- public bool IsValidLocation (Rune rune, int col, int row)
+ public bool IsValidLocation (string text, int col, int row)
{
- if (rune.GetColumns () < 2)
- {
- return col >= 0 && row >= 0 && col < Cols && row < Rows && Clip!.Contains (col, row);
- }
+ int textWidth = text.GetColumns ();
- return Clip!.Contains (col, row) || Clip!.Contains (col + 1, row);
+ return col >= 0 && row >= 0 && col + textWidth <= Cols && row < Rows && Clip!.Contains (col, row);
}
///
@@ -383,14 +313,14 @@ public class OutputBufferImpl : IOutputBuffer
{
for (int c = rect.X; c < rect.X + rect.Width; c++)
{
- if (!IsValidLocation (rune, c, r))
+ if (!IsValidLocation (rune.ToString (), c, r))
{
continue;
}
Contents [r, c] = new ()
{
- Rune = rune != default (Rune) ? rune : (Rune)' ',
+ Grapheme = rune != default (Rune) ? rune.ToString () : " ",
Attribute = CurrentAttribute, IsDirty = true
};
}
diff --git a/Terminal.Gui/Text/StringExtensions.cs b/Terminal.Gui/Text/StringExtensions.cs
index eb053a3d8..59f433b60 100644
--- a/Terminal.Gui/Text/StringExtensions.cs
+++ b/Terminal.Gui/Text/StringExtensions.cs
@@ -1,5 +1,4 @@
using System.Buffers;
-using System.Globalization;
namespace Terminal.Gui.Text;
@@ -54,8 +53,9 @@ public static class StringExtensions
/// Gets the number of columns the string occupies in the terminal.
/// This is a Terminal.Gui extension method to to support TUI text manipulation.
/// The string to measure.
+ /// Indicates whether to ignore values less than zero, such as control keys.
///
- public static int GetColumns (this string str)
+ public static int GetColumns (this string str, bool ignoreLessThanZero = true)
{
if (string.IsNullOrEmpty (str))
{
@@ -63,17 +63,25 @@ public static class StringExtensions
}
var total = 0;
- TextElementEnumerator enumerator = StringInfo.GetTextElementEnumerator (str);
- while (enumerator.MoveNext ())
+ foreach (string grapheme in GraphemeHelper.GetGraphemes (str))
{
- string element = enumerator.GetTextElement ();
-
// Get the maximum rune width within this grapheme cluster
- int width = element
- .EnumerateRunes ()
- .Max (r => Math.Max (r.GetColumns (), 0));
- total += width;
+ int clusterWidth = grapheme.EnumerateRunes ()
+ .Sum (r =>
+ {
+ int w = r.GetColumns ();
+
+ return ignoreLessThanZero && w < 0 ? 0 : w;
+ });
+
+ // Clamp to realistic max display width
+ if (clusterWidth > 2)
+ {
+ clusterWidth = 2;
+ }
+
+ total += clusterWidth;
}
return total;
@@ -94,7 +102,7 @@ public static class StringExtensions
/// A indicating if all elements of the are ASCII digits (
/// ) or not (
///
- public static bool IsAllAsciiDigits (this ReadOnlySpan stringSpan) { return stringSpan.ToString ().All (char.IsAsciiDigit); }
+ public static bool IsAllAsciiDigits (this ReadOnlySpan stringSpan) { return !stringSpan.IsEmpty && stringSpan.ToString ().All (char.IsAsciiDigit); }
///
/// Determines if this of is composed entirely of ASCII
@@ -105,7 +113,7 @@ public static class StringExtensions
/// A indicating if all elements of the are ASCII digits (
/// ) or not (
///
- public static bool IsAllAsciiHexDigits (this ReadOnlySpan stringSpan) { return stringSpan.ToString ().All (char.IsAsciiHexDigit); }
+ public static bool IsAllAsciiHexDigits (this ReadOnlySpan stringSpan) { return !stringSpan.IsEmpty && stringSpan.ToString ().All (char.IsAsciiHexDigit); }
/// Repeats the string times.
/// This is a Terminal.Gui extension method to to support TUI text manipulation.
@@ -206,4 +214,60 @@ public static class StringExtensions
return encoding.GetString (bytes.ToArray ());
}
+
+ /// Converts a generic collection into a string.
+ /// The enumerable string to convert.
+ ///
+ public static string ToString (IEnumerable strings) { return string.Concat (strings); }
+
+ /// Converts the string into a .
+ /// This is a Terminal.Gui extension method to to support TUI text manipulation.
+ /// The string to convert.
+ ///
+ public static List ToStringList (this string str)
+ {
+ List strings = [];
+
+ foreach (string grapheme in GraphemeHelper.GetGraphemes (str))
+ {
+ strings.Add (grapheme);
+ }
+
+ return strings;
+ }
+
+ /// Reports whether a string is a surrogate code point.
+ /// This is a Terminal.Gui extension method to to support TUI text manipulation.
+ /// The string to probe.
+ /// if the string is a surrogate code point; otherwise.
+ public static bool IsSurrogatePair (this string str)
+ {
+ if (str.Length != 2)
+ {
+ return false;
+ }
+
+ Rune rune = Rune.GetRuneAt (str, 0);
+
+ return rune.IsSurrogatePair ();
+ }
+
+ ///
+ /// Ensures the text is not a control character and can be displayed by translating characters below 0x20 to
+ /// equivalent, printable, Unicode chars.
+ ///
+ /// This is a Terminal.Gui extension method to to support TUI text manipulation.
+ /// The text.
+ ///
+ public static string MakePrintable (this string str)
+ {
+ if (str.Length > 1)
+ {
+ return str;
+ }
+
+ char ch = str [0];
+
+ return char.IsControl (ch) ? new ((char)(ch + 0x2400), 1) : str;
+ }
}
diff --git a/Terminal.Gui/Text/TextFormatter.cs b/Terminal.Gui/Text/TextFormatter.cs
index a11289a2b..ecd1be459 100644
--- a/Terminal.Gui/Text/TextFormatter.cs
+++ b/Terminal.Gui/Text/TextFormatter.cs
@@ -122,9 +122,10 @@ public class TextFormatter
break;
}
- Rune [] runes = linesFormatted [line].ToRunes ();
+ string strings = linesFormatted [line];
+ string[] graphemes = GraphemeHelper.GetGraphemes (strings).ToArray ();
- // When text is justified, we lost left or right, so we use the direction to align.
+ // When text is justified, we lost left or right, so we use the direction to align.
int x = 0, y = 0;
@@ -139,7 +140,7 @@ public class TextFormatter
}
else
{
- int runesWidth = StringExtensions.ToString (runes).GetColumns ();
+ int runesWidth = strings.GetColumns ();
x = screen.Right - runesWidth;
CursorPosition = screen.Width - runesWidth + (_hotKeyPos > -1 ? _hotKeyPos : 0);
}
@@ -195,7 +196,7 @@ public class TextFormatter
}
else
{
- int runesWidth = StringExtensions.ToString (runes).GetColumns ();
+ int runesWidth = strings.GetColumns ();
x = screen.Left + (screen.Width - runesWidth) / 2;
CursorPosition = (screen.Width - runesWidth) / 2 + (_hotKeyPos > -1 ? _hotKeyPos : 0);
@@ -213,7 +214,7 @@ public class TextFormatter
{
if (isVertical)
{
- y = screen.Bottom - runes.Length;
+ y = screen.Bottom - graphemes.Length;
}
else
{
@@ -249,7 +250,7 @@ public class TextFormatter
{
if (isVertical)
{
- int s = (screen.Height - runes.Length) / 2;
+ int s = (screen.Height - graphemes.Length) / 2;
y = screen.Top + s;
}
else
@@ -270,14 +271,14 @@ public class TextFormatter
int size = isVertical ? screen.Height : screen.Width;
int current = start + colOffset;
List lastZeroWidthPos = null!;
- Rune rune = default;
- int zeroLengthCount = isVertical ? runes.Sum (r => r.GetColumns () == 0 ? 1 : 0) : 0;
+ string text = default;
+ int zeroLengthCount = isVertical ? strings.EnumerateRunes ().Sum (r => r.GetColumns () == 0 ? 1 : 0) : 0;
for (int idx = (isVertical ? start - y : start - x) + colOffset;
current < start + size + zeroLengthCount;
idx++)
{
- Rune lastRuneUsed = rune;
+ string lastTextUsed = text;
if (lastZeroWidthPos is null)
{
@@ -291,17 +292,17 @@ public class TextFormatter
continue;
}
- if (!FillRemaining && idx > runes.Length - 1)
+ if (!FillRemaining && idx > graphemes.Length - 1)
{
break;
}
if ((!isVertical
&& (current - start > maxScreen.Left + maxScreen.Width - screen.X + colOffset
- || (idx < runes.Length && runes [idx].GetColumns () > screen.Width)))
+ || (idx < graphemes.Length && graphemes [idx].GetColumns () > screen.Width)))
|| (isVertical
&& ((current > start + size + zeroLengthCount && idx > maxScreen.Top + maxScreen.Height - screen.Y)
- || (idx < runes.Length && runes [idx].GetColumns () > screen.Width))))
+ || (idx < graphemes.Length && graphemes [idx].GetColumns () > screen.Width))))
{
break;
}
@@ -312,13 +313,13 @@ public class TextFormatter
// break;
- rune = (Rune)' ';
+ text = " ";
if (isVertical)
{
- if (idx >= 0 && idx < runes.Length)
+ if (idx >= 0 && idx < graphemes.Length)
{
- rune = runes [idx];
+ text = graphemes [idx];
}
if (lastZeroWidthPos is null)
@@ -334,7 +335,7 @@ public class TextFormatter
if (foundIdx > -1)
{
- if (rune.IsCombiningMark ())
+ if (Rune.GetRuneAt (text, 0).IsCombiningMark ())
{
lastZeroWidthPos [foundIdx] =
new Point (
@@ -347,7 +348,7 @@ public class TextFormatter
current
);
}
- else if (!rune.IsCombiningMark () && lastRuneUsed.IsCombiningMark ())
+ else if (!Rune.GetRuneAt (text, 0).IsCombiningMark () && Rune.GetRuneAt (lastTextUsed, 0).IsCombiningMark ())
{
current++;
driver?.Move (x, current);
@@ -367,13 +368,13 @@ public class TextFormatter
{
driver?.Move (current, y);
- if (idx >= 0 && idx < runes.Length)
+ if (idx >= 0 && idx < graphemes.Length)
{
- rune = runes [idx];
+ text = graphemes [idx];
}
}
- int runeWidth = GetRuneWidth (rune, TabWidth);
+ int runeWidth = GetTextWidth (text, TabWidth);
if (HotKeyPos > -1 && idx == HotKeyPos)
{
@@ -383,7 +384,7 @@ public class TextFormatter
}
driver?.SetAttribute (hotColor);
- driver?.AddRune (rune);
+ driver?.AddStr (text);
driver?.SetAttribute (normalColor);
}
else
@@ -412,7 +413,7 @@ public class TextFormatter
}
}
- driver?.AddRune (rune);
+ driver?.AddStr (text);
}
if (isVertical)
@@ -427,11 +428,11 @@ public class TextFormatter
current += runeWidth;
}
- int nextRuneWidth = idx + 1 > -1 && idx + 1 < runes.Length
- ? runes [idx + 1].GetColumns ()
+ int nextRuneWidth = idx + 1 > -1 && idx + 1 < graphemes.Length
+ ? graphemes [idx + 1].GetColumns ()
: 0;
- if (!isVertical && idx + 1 < runes.Length && current + nextRuneWidth > start + size)
+ if (!isVertical && idx + 1 < graphemes.Length && current + nextRuneWidth > start + size)
{
break;
}
@@ -929,9 +930,10 @@ public class TextFormatter
break;
}
- Rune [] runes = linesFormatted [line].ToRunes ();
+ string strings = linesFormatted [line];
+ string [] graphemes = GraphemeHelper.GetGraphemes (strings).ToArray ();
- // When text is justified, we lost left or right, so we use the direction to align.
+ // When text is justified, we lost left or right, so we use the direction to align.
int x = 0, y = 0;
switch (Alignment)
@@ -946,17 +948,17 @@ public class TextFormatter
}
case Alignment.End:
{
- int runesWidth = StringExtensions.ToString (runes).GetColumns ();
- x = screen.Right - runesWidth;
+ int stringsWidth = strings.GetColumns ();
+ x = screen.Right - stringsWidth;
break;
}
case Alignment.Start when isVertical:
{
- int runesWidth = line > 0
- ? GetColumnsRequiredForVerticalText (linesFormatted, 0, line, TabWidth)
- : 0;
- x = screen.Left + runesWidth;
+ int stringsWidth = line > 0
+ ? GetColumnsRequiredForVerticalText (linesFormatted, 0, line, TabWidth)
+ : 0;
+ x = screen.Left + stringsWidth;
break;
}
@@ -966,7 +968,7 @@ public class TextFormatter
break;
case Alignment.Fill when isVertical:
{
- int runesWidth = GetColumnsRequiredForVerticalText (linesFormatted, 0, linesFormatted.Count, TabWidth);
+ int stringsWidth = GetColumnsRequiredForVerticalText (linesFormatted, 0, linesFormatted.Count, TabWidth);
int prevLineWidth = line > 0 ? GetColumnsRequiredForVerticalText (linesFormatted, line - 1, 1, TabWidth) : 0;
int firstLineWidth = GetColumnsRequiredForVerticalText (linesFormatted, 0, 1, TabWidth);
int lastLineWidth = GetColumnsRequiredForVerticalText (linesFormatted, linesFormatted.Count - 1, 1, TabWidth);
@@ -975,7 +977,7 @@ public class TextFormatter
x = line == 0
? screen.Left
: line < linesFormatted.Count - 1
- ? screen.Width - runesWidth <= lastLineWidth ? screen.Left + prevLineWidth : screen.Left + line * interval
+ ? screen.Width - stringsWidth <= lastLineWidth ? screen.Left + prevLineWidth : screen.Left + line * interval
: screen.Right - lastLineWidth;
break;
@@ -986,16 +988,16 @@ public class TextFormatter
break;
case Alignment.Center when isVertical:
{
- int runesWidth = GetColumnsRequiredForVerticalText (linesFormatted, 0, linesFormatted.Count, TabWidth);
+ int stringsWidth = GetColumnsRequiredForVerticalText (linesFormatted, 0, linesFormatted.Count, TabWidth);
int linesWidth = GetColumnsRequiredForVerticalText (linesFormatted, 0, line, TabWidth);
- x = screen.Left + linesWidth + (screen.Width - runesWidth) / 2;
+ x = screen.Left + linesWidth + (screen.Width - stringsWidth) / 2;
break;
}
case Alignment.Center:
{
- int runesWidth = StringExtensions.ToString (runes).GetColumns ();
- x = screen.Left + (screen.Width - runesWidth) / 2;
+ int stringsWidth = strings.GetColumns ();
+ x = screen.Left + (screen.Width - stringsWidth) / 2;
break;
}
@@ -1009,7 +1011,7 @@ public class TextFormatter
{
// Vertical Alignment
case Alignment.End when isVertical:
- y = screen.Bottom - runes.Length;
+ y = screen.Bottom - graphemes.Length;
break;
case Alignment.End:
@@ -1039,7 +1041,7 @@ public class TextFormatter
}
case Alignment.Center when isVertical:
{
- int s = (screen.Height - runes.Length) / 2;
+ int s = (screen.Height - graphemes.Length) / 2;
y = screen.Top + s;
break;
@@ -1061,7 +1063,7 @@ public class TextFormatter
int start = isVertical ? screen.Top : screen.Left;
int size = isVertical ? screen.Height : screen.Width;
int current = start + colOffset;
- int zeroLengthCount = isVertical ? runes.Sum (r => r.GetColumns () == 0 ? 1 : 0) : 0;
+ int zeroLengthCount = isVertical ? strings.EnumerateRunes ().Sum (r => r.GetColumns () == 0 ? 1 : 0) : 0;
int lineX = x, lineY = y, lineWidth = 0, lineHeight = 1;
@@ -1079,23 +1081,23 @@ public class TextFormatter
continue;
}
- if (!FillRemaining && idx > runes.Length - 1)
+ if (!FillRemaining && idx > graphemes.Length - 1)
{
break;
}
if ((!isVertical
&& (current - start > maxScreen.Left + maxScreen.Width - screen.X + colOffset
- || (idx < runes.Length && runes [idx].GetColumns () > screen.Width)))
+ || (idx < graphemes.Length && graphemes [idx].GetColumns () > screen.Width)))
|| (isVertical
&& ((current > start + size + zeroLengthCount && idx > maxScreen.Top + maxScreen.Height - screen.Y)
- || (idx < runes.Length && runes [idx].GetColumns () > screen.Width))))
+ || (idx < graphemes.Length && graphemes [idx].GetColumns () > screen.Width))))
{
break;
}
- Rune rune = idx >= 0 && idx < runes.Length ? runes [idx] : (Rune)' ';
- int runeWidth = GetRuneWidth (rune, TabWidth);
+ string text = idx >= 0 && idx < graphemes.Length ? graphemes [idx] : " ";
+ int runeWidth = GetStringWidth (text, TabWidth);
if (isVertical)
{
@@ -1114,11 +1116,11 @@ public class TextFormatter
current += isVertical && runeWidth > 0 ? 1 : runeWidth;
- int nextRuneWidth = idx + 1 > -1 && idx + 1 < runes.Length
- ? runes [idx + 1].GetColumns ()
+ int nextStringWidth = idx + 1 > -1 && idx + 1 < graphemes.Length
+ ? graphemes [idx + 1].GetColumns ()
: 0;
- if (!isVertical && idx + 1 < runes.Length && current + nextRuneWidth > start + size)
+ if (!isVertical && idx + 1 < graphemes.Length && current + nextStringWidth > start + size)
{
break;
}
@@ -1331,33 +1333,34 @@ public class TextFormatter
/// A list of text without the newline characters.
public static List SplitNewLine (string text)
{
- List runes = text.ToRuneList ();
+ List graphemes = GraphemeHelper.GetGraphemes (text).ToList ();
List lines = new ();
var start = 0;
- for (var i = 0; i < runes.Count; i++)
+ for (var i = 0; i < graphemes.Count; i++)
{
int end = i;
- switch (runes [i].Value)
+ switch (graphemes [i])
{
- case '\n':
- lines.Add (StringExtensions.ToString (runes.GetRange (start, end - start)));
+ case "\n":
+ case "\r\n":
+ lines.Add (StringExtensions.ToString (graphemes.GetRange (start, end - start)));
i++;
start = i;
break;
- case '\r':
- if (i + 1 < runes.Count && runes [i + 1].Value == '\n')
+ case "\r":
+ if (i + 1 < graphemes.Count && graphemes [i + 1] == "\n")
{
- lines.Add (StringExtensions.ToString (runes.GetRange (start, end - start)));
+ lines.Add (StringExtensions.ToString (graphemes.GetRange (start, end - start)));
i += 2;
start = i;
}
else
{
- lines.Add (StringExtensions.ToString (runes.GetRange (start, end - start)));
+ lines.Add (StringExtensions.ToString (graphemes.GetRange (start, end - start)));
i++;
start = i;
}
@@ -1366,14 +1369,14 @@ public class TextFormatter
}
}
- switch (runes.Count)
+ switch (graphemes.Count)
{
case > 0 when lines.Count == 0:
- lines.Add (StringExtensions.ToString (runes));
+ lines.Add (StringExtensions.ToString (graphemes));
break;
- case > 0 when start < runes.Count:
- lines.Add (StringExtensions.ToString (runes.GetRange (start, runes.Count - start)));
+ case > 0 when start < graphemes.Count:
+ lines.Add (StringExtensions.ToString (graphemes.GetRange (start, graphemes.Count - start)));
break;
default:
@@ -1401,16 +1404,19 @@ public class TextFormatter
}
// if value is not wide enough
- if (text.EnumerateRunes ().Sum (c => c.GetColumns ()) < width)
+ string [] graphemes = GraphemeHelper.GetGraphemes (text).ToArray ();
+ int totalColumns = graphemes.Sum (s => s.GetColumns ());
+
+ if (totalColumns < width)
{
// pad it out with spaces to the given Alignment
- int toPad = width - text.EnumerateRunes ().Sum (c => c.GetColumns ());
+ int toPad = width - totalColumns;
return text + new string (' ', toPad);
}
// value is too wide
- return new (text.TakeWhile (c => (width -= ((Rune)c).GetColumns ()) >= 0).ToArray ());
+ return string.Concat (graphemes.TakeWhile (t => (width -= t.GetColumns ()) >= 0));
}
/// Formats the provided text to fit within the width provided using word wrapping.
@@ -1451,18 +1457,18 @@ public class TextFormatter
return lines;
}
- List runes = StripCRLF (text).ToRuneList ();
+ List graphemes = GraphemeHelper.GetGraphemes (StripCRLF (text)).ToList ();
int start = Math.Max (
- !runes.Contains ((Rune)' ') && textFormatter is { VerticalAlignment: Alignment.End } && IsVerticalDirection (textDirection)
- ? runes.Count - width
+ !graphemes.Contains (" ") && textFormatter is { VerticalAlignment: Alignment.End } && IsVerticalDirection (textDirection)
+ ? graphemes.Count - width
: 0,
0);
int end;
if (preserveTrailingSpaces)
{
- while ((end = start) < runes.Count)
+ while (start < graphemes.Count)
{
end = GetNextWhiteSpace (start, width, out bool incomplete);
@@ -1473,7 +1479,7 @@ public class TextFormatter
break;
}
- lines.Add (StringExtensions.ToString (runes.GetRange (start, end - start)));
+ lines.Add (StringExtensions.ToString (graphemes.GetRange (start, end - start)));
start = end;
if (incomplete)
@@ -1490,14 +1496,14 @@ public class TextFormatter
{
while ((end = start
+ GetLengthThatFits (
- runes.GetRange (start, runes.Count - start),
+ string.Concat (graphemes.GetRange (start, graphemes.Count - start)),
width,
tabWidth,
textDirection
))
- < runes.Count)
+ < graphemes.Count)
{
- while (runes [end].Value != ' ' && end > start)
+ while (graphemes [end] != " " && end > start)
{
end--;
}
@@ -1506,22 +1512,22 @@ public class TextFormatter
{
end = start
+ GetLengthThatFits (
- runes.GetRange (end, runes.Count - end),
+ string.Concat (graphemes.GetRange (end, graphemes.Count - end)),
width,
tabWidth,
textDirection
);
}
- var str = StringExtensions.ToString (runes.GetRange (start, end - start));
+ var str = StringExtensions.ToString (graphemes.GetRange (start, end - start));
int zeroLength = text.EnumerateRunes ().Sum (r => r.GetColumns () == 0 ? 1 : 0);
- if (end > start && GetRuneWidth (str, tabWidth, textDirection) <= width + zeroLength)
+ if (end > start && GetTextWidth (str, tabWidth, textDirection) <= width + zeroLength)
{
lines.Add (str);
start = end;
- if (runes [end].Value == ' ')
+ if (graphemes [end] == " ")
{
start++;
}
@@ -1535,9 +1541,9 @@ public class TextFormatter
}
else
{
- while ((end = start + width) < runes.Count)
+ while ((end = start + width) < graphemes.Count)
{
- while (runes [end].Value != ' ' && end > start)
+ while (graphemes [end] != " " && end > start)
{
end--;
}
@@ -1549,11 +1555,11 @@ public class TextFormatter
var zeroLength = 0;
- for (int i = end; i < runes.Count - start; i++)
+ for (int i = end; i < graphemes.Count - start; i++)
{
- Rune r = runes [i];
+ string s = graphemes [i];
- if (r.GetColumns () == 0)
+ if (s.GetColumns () == 0)
{
zeroLength++;
}
@@ -1565,7 +1571,7 @@ public class TextFormatter
lines.Add (
StringExtensions.ToString (
- runes.GetRange (
+ graphemes.GetRange (
start,
end - start + zeroLength
)
@@ -1574,7 +1580,7 @@ public class TextFormatter
end += zeroLength;
start = end;
- if (runes [end].Value == ' ')
+ if (graphemes [end] == " ")
{
start++;
}
@@ -1588,13 +1594,13 @@ public class TextFormatter
int length = cLength;
incomplete = false;
- while (length < cWidth && to < runes.Count)
+ while (length < cWidth && to < graphemes.Count)
{
- Rune rune = runes [to];
+ string grapheme = graphemes [to];
if (IsHorizontalDirection (textDirection))
{
- length += rune.GetColumns ();
+ length += grapheme.GetColumns (false);
}
else
{
@@ -1603,7 +1609,7 @@ public class TextFormatter
if (length > cWidth)
{
- if (to >= runes.Count || (length > 1 && cWidth <= 1))
+ if (to >= graphemes.Count || (length > 1 && cWidth <= 1))
{
incomplete = true;
}
@@ -1611,15 +1617,15 @@ public class TextFormatter
return to;
}
- switch (rune.Value)
+ switch (grapheme)
{
- case ' ' when length == cWidth:
+ case " " when length == cWidth:
return to + 1;
- case ' ' when length > cWidth:
+ case " " when length > cWidth:
return to;
- case ' ':
+ case " ":
return GetNextWhiteSpace (to + 1, cWidth, out incomplete, length);
- case '\t':
+ case "\t":
{
length += tabWidth + 1;
@@ -1644,8 +1650,8 @@ public class TextFormatter
return cLength switch
{
- > 0 when to < runes.Count && runes [to].Value != ' ' && runes [to].Value != '\t' => from,
- > 0 when to < runes.Count && (runes [to].Value == ' ' || runes [to].Value == '\t') => from,
+ > 0 when to < graphemes.Count && graphemes [to] != " " && graphemes [to] != "\t" => from,
+ > 0 when to < graphemes.Count && (graphemes [to] == " " || graphemes [to] == "\t") => from,
_ => to
};
}
@@ -1653,7 +1659,7 @@ public class TextFormatter
if (start < text.GetRuneCount ())
{
string str = ReplaceTABWithSpaces (
- StringExtensions.ToString (runes.GetRange (start, runes.Count - start)),
+ StringExtensions.ToString (graphemes.GetRange (start, graphemes.Count - start)),
tabWidth
);
@@ -1717,42 +1723,42 @@ public class TextFormatter
}
text = ReplaceTABWithSpaces (text, tabWidth);
- List runes = text.ToRuneList ();
- int zeroLength = runes.Sum (r => r.GetColumns () == 0 ? 1 : 0);
+ List graphemes = GraphemeHelper.GetGraphemes (text).ToList ();
+ int zeroLength = graphemes.Sum (s => s.EnumerateRunes ().Sum (r => r.GetColumns() == 0 ? 1 : 0));
- if (runes.Count - zeroLength > width)
+ if (graphemes.Count - zeroLength > width)
{
if (IsHorizontalDirection (textDirection))
{
if (textFormatter is { Alignment: Alignment.End })
{
- return GetRangeThatFits (runes, runes.Count - width, text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, graphemes.Count - width, text, width, tabWidth, textDirection);
}
if (textFormatter is { Alignment: Alignment.Center })
{
- return GetRangeThatFits (runes, Math.Max ((runes.Count - width - zeroLength) / 2, 0), text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, Math.Max ((graphemes.Count - width - zeroLength) / 2, 0), text, width, tabWidth, textDirection);
}
- return GetRangeThatFits (runes, 0, text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, 0, text, width, tabWidth, textDirection);
}
if (IsVerticalDirection (textDirection))
{
if (textFormatter is { VerticalAlignment: Alignment.End })
{
- return GetRangeThatFits (runes, runes.Count - width, text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, graphemes.Count - width, text, width, tabWidth, textDirection);
}
if (textFormatter is { VerticalAlignment: Alignment.Center })
{
- return GetRangeThatFits (runes, Math.Max ((runes.Count - width - zeroLength) / 2, 0), text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, Math.Max ((graphemes.Count - width - zeroLength) / 2, 0), text, width, tabWidth, textDirection);
}
- return GetRangeThatFits (runes, 0, text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, 0, text, width, tabWidth, textDirection);
}
- return StringExtensions.ToString (runes.GetRange (0, width + zeroLength));
+ return StringExtensions.ToString (graphemes.GetRange (0, width + zeroLength));
}
if (justify)
@@ -1764,18 +1770,18 @@ public class TextFormatter
{
if (textFormatter is { Alignment: Alignment.End })
{
- if (GetRuneWidth (text, tabWidth, textDirection) > width)
+ if (GetTextWidth (text, tabWidth, textDirection) > width)
{
- return GetRangeThatFits (runes, runes.Count - width, text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, graphemes.Count - width, text, width, tabWidth, textDirection);
}
}
else if (textFormatter is { Alignment: Alignment.Center })
{
- return GetRangeThatFits (runes, Math.Max ((runes.Count - width - zeroLength) / 2, 0), text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, Math.Max ((graphemes.Count - width - zeroLength) / 2, 0), text, width, tabWidth, textDirection);
}
- else if (GetRuneWidth (text, tabWidth, textDirection) > width)
+ else if (GetTextWidth (text, tabWidth, textDirection) > width)
{
- return GetRangeThatFits (runes, 0, text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, 0, text, width, tabWidth, textDirection);
}
}
@@ -1783,28 +1789,28 @@ public class TextFormatter
{
if (textFormatter is { VerticalAlignment: Alignment.End })
{
- if (runes.Count - zeroLength > width)
+ if (graphemes.Count - zeroLength > width)
{
- return GetRangeThatFits (runes, runes.Count - width, text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, graphemes.Count - width, text, width, tabWidth, textDirection);
}
}
else if (textFormatter is { VerticalAlignment: Alignment.Center })
{
- return GetRangeThatFits (runes, Math.Max ((runes.Count - width - zeroLength) / 2, 0), text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, Math.Max ((graphemes.Count - width - zeroLength) / 2, 0), text, width, tabWidth, textDirection);
}
- else if (runes.Count - zeroLength > width)
+ else if (graphemes.Count - zeroLength > width)
{
- return GetRangeThatFits (runes, 0, text, width, tabWidth, textDirection);
+ return GetRangeThatFits (graphemes, 0, text, width, tabWidth, textDirection);
}
}
return text;
}
- private static string GetRangeThatFits (List runes, int index, string text, int width, int tabWidth, TextDirection textDirection)
+ private static string GetRangeThatFits (List strings, int index, string text, int width, int tabWidth, TextDirection textDirection)
{
return StringExtensions.ToString (
- runes.GetRange (
+ strings.GetRange (
Math.Max (index, 0),
GetLengthThatFits (text, width, tabWidth, textDirection)
)
@@ -1842,7 +1848,7 @@ public class TextFormatter
if (IsHorizontalDirection (textDirection))
{
- textCount = words.Sum (arg => GetRuneWidth (arg, tabWidth, textDirection));
+ textCount = words.Sum (arg => GetTextWidth (arg, tabWidth, textDirection));
}
else
{
@@ -2137,11 +2143,11 @@ public class TextFormatter
i < (linesCount == -1 ? lines.Count : startLine + linesCount);
i++)
{
- string runes = lines [i];
+ string strings = lines [i];
- if (runes.Length > 0)
+ if (strings.Length > 0)
{
- max += runes.EnumerateRunes ().Max (r => GetRuneWidth (r, tabWidth));
+ max += strings.EnumerateRunes ().Max (r => GetRuneWidth (r, tabWidth));
}
}
@@ -2163,7 +2169,7 @@ public class TextFormatter
{
List result = SplitNewLine (text);
- return result.Max (x => GetRuneWidth (x, tabWidth));
+ return result.Max (x => GetTextWidth (x, tabWidth));
}
///
@@ -2182,13 +2188,13 @@ public class TextFormatter
public static int GetSumMaxCharWidth (string text, int startIndex = -1, int length = -1, int tabWidth = 0)
{
var max = 0;
- Rune [] runes = text.ToRunes ();
+ string [] graphemes = GraphemeHelper.GetGraphemes (text).ToArray ();
for (int i = startIndex == -1 ? 0 : startIndex;
- i < (length == -1 ? runes.Length : startIndex + length);
+ i < (length == -1 ? graphemes.Length : startIndex + length);
i++)
{
- max += GetRuneWidth (runes [i], tabWidth);
+ max += GetStringWidth (graphemes [i], tabWidth);
}
return max;
@@ -2206,51 +2212,38 @@ public class TextFormatter
/// The index of the text that fit the width.
public static int GetLengthThatFits (string text, int width, int tabWidth = 0, TextDirection textDirection = TextDirection.LeftRight_TopBottom)
{
- return GetLengthThatFits (text?.ToRuneList () ?? [], width, tabWidth, textDirection);
- }
-
- /// Gets the number of the Runes in a list of Runes that will fit in .
- ///
- /// This API will return incorrect results if the text includes glyphs whose width is dependent on surrounding
- /// glyphs (e.g. Arabic).
- ///
- /// The list of runes.
- /// The width.
- /// The width used for a tab.
- /// The text direction.
- /// The index of the last Rune in that fit in .
- public static int GetLengthThatFits (List runes, int width, int tabWidth = 0, TextDirection textDirection = TextDirection.LeftRight_TopBottom)
- {
- if (runes is null || runes.Count == 0)
+ if (string.IsNullOrEmpty (text))
{
return 0;
}
- var runesLength = 0;
- var runeIdx = 0;
+ var textLength = 0;
+ var stringIdx = 0;
- for (; runeIdx < runes.Count; runeIdx++)
+ foreach (string grapheme in GraphemeHelper.GetGraphemes (text))
{
- int runeWidth = GetRuneWidth (runes [runeIdx], tabWidth, textDirection);
+ int textWidth = GetStringWidth (grapheme, tabWidth, textDirection);
- if (runesLength + runeWidth > width)
+ if (textLength + textWidth > width)
{
break;
}
- runesLength += runeWidth;
+ textLength += textWidth;
+ stringIdx++;
}
- return runeIdx;
+ return stringIdx;
}
- private static int GetRuneWidth (string str, int tabWidth, TextDirection textDirection = TextDirection.LeftRight_TopBottom)
+ private static int GetTextWidth (string str, int tabWidth, TextDirection textDirection = TextDirection.LeftRight_TopBottom)
{
int runesWidth = 0;
- foreach (Rune rune in str.EnumerateRunes ())
+ foreach (string grapheme in GraphemeHelper.GetGraphemes (str))
{
- runesWidth += GetRuneWidth (rune, tabWidth, textDirection);
+ runesWidth += GetStringWidth (grapheme, tabWidth, textDirection);
}
+
return runesWidth;
}
@@ -2271,6 +2264,23 @@ public class TextFormatter
return runeWidth;
}
+ private static int GetStringWidth (string str, int tabWidth, TextDirection textDirection = TextDirection.LeftRight_TopBottom)
+ {
+ int textWidth = IsHorizontalDirection (textDirection) ? str.GetColumns (false) : str.GetColumns () == 0 ? 0 : 1;
+
+ if (str == "\t")
+ {
+ return tabWidth;
+ }
+
+ if (textWidth is < 0 or > 0)
+ {
+ return Math.Max (textWidth, 1);
+ }
+
+ return textWidth;
+ }
+
/// Gets the index position from the list based on the .
///
/// This API will return incorrect results if the text includes glyphs whose width is dependent on surrounding
@@ -2282,23 +2292,23 @@ public class TextFormatter
/// The index of the list that fit the width.
public static int GetMaxColsForWidth (List lines, int width, int tabWidth = 0)
{
- var runesLength = 0;
+ var textLength = 0;
var lineIdx = 0;
for (; lineIdx < lines.Count; lineIdx++)
{
- List runes = lines [lineIdx].ToRuneList ();
+ string [] graphemes = GraphemeHelper.GetGraphemes (lines [lineIdx]).ToArray ();
- int maxRruneWidth = runes.Count > 0
- ? runes.Max (r => GetRuneWidth (r, tabWidth))
+ int maxTextWidth = graphemes.Length > 0
+ ? graphemes.Max (r => GetStringWidth (r, tabWidth))
: 1;
- if (runesLength + maxRruneWidth > width)
+ if (textLength + maxTextWidth > width)
{
break;
}
- runesLength += maxRruneWidth;
+ textLength += maxTextWidth;
}
return lineIdx;
diff --git a/Terminal.Gui/ViewBase/Adornment/ShadowView.cs b/Terminal.Gui/ViewBase/Adornment/ShadowView.cs
index 9212e7271..cbb484fb7 100644
--- a/Terminal.Gui/ViewBase/Adornment/ShadowView.cs
+++ b/Terminal.Gui/ViewBase/Adornment/ShadowView.cs
@@ -100,7 +100,7 @@ internal class ShadowView : View
if (c < ScreenContents?.GetLength (1) && r < ScreenContents?.GetLength (0))
{
- AddRune (ScreenContents [r, c].Rune);
+ AddStr (ScreenContents [r, c].Grapheme);
}
}
}
@@ -134,7 +134,7 @@ internal class ShadowView : View
if (ScreenContents is { } && screen.X < ScreenContents.GetLength (1) && r < ScreenContents.GetLength (0))
{
- AddRune (ScreenContents [r, c].Rune);
+ AddStr (ScreenContents [r, c].Grapheme);
}
}
}
@@ -142,7 +142,7 @@ internal class ShadowView : View
private Attribute GetAttributeUnderLocation (Point location)
{
- if (SuperView is not Adornment adornment
+ if (SuperView is not Adornment
|| location.X < 0
|| location.X >= App?.Screen.Width
|| location.Y < 0
@@ -171,7 +171,7 @@ internal class ShadowView : View
if (newAttribute.Background == Color.DarkGray)
{
List currentViewsUnderMouse = GetViewsUnderLocation (location, ViewportSettingsFlags.Transparent);
- View? underView = currentViewsUnderMouse!.LastOrDefault ();
+ View? underView = currentViewsUnderMouse.LastOrDefault ();
attr = underView?.GetAttributeForRole (VisualRole.Normal) ?? Attribute.Default;
newAttribute = new (
diff --git a/Terminal.Gui/ViewBase/View.Drawing.Primitives.cs b/Terminal.Gui/ViewBase/View.Drawing.Primitives.cs
index 6b169718b..c5971598c 100644
--- a/Terminal.Gui/ViewBase/View.Drawing.Primitives.cs
+++ b/Terminal.Gui/ViewBase/View.Drawing.Primitives.cs
@@ -32,7 +32,6 @@ public partial class View
Driver?.AddRune (rune);
}
-
///
/// Adds the specified to the display at the current cursor position. This method is a
/// convenience method that calls with the constructor.
@@ -72,6 +71,25 @@ public partial class View
{
Driver?.AddStr (str);
}
+
+ /// Draws the specified in the specified viewport-relative column and row of the View.
+ ///
+ /// If the provided coordinates are outside the visible content area, this method does nothing.
+ ///
+ ///
+ /// The top-left corner of the visible content area is ViewPort.Location.
+ ///
+ /// Column (viewport-relative).
+ /// Row (viewport-relative).
+ /// The Text.
+ public void AddStr (int col, int row, string str)
+ {
+ if (Move (col, row))
+ {
+ Driver?.AddStr (str);
+ }
+ }
+
/// Utility function to draw strings that contain a hotkey.
/// String to display, the hotkey specifier before a letter flags the next letter as the hotkey.
/// Hot color.
diff --git a/Terminal.Gui/ViewBase/View.Drawing.cs b/Terminal.Gui/ViewBase/View.Drawing.cs
index ed300ee5d..70e915863 100644
--- a/Terminal.Gui/ViewBase/View.Drawing.cs
+++ b/Terminal.Gui/ViewBase/View.Drawing.cs
@@ -194,11 +194,11 @@ public partial class View // Drawing APIs
else
{
// Set the clip to be just the thicknesses of the adornments
- // TODO: Put this union logic in a method on View?
+ // TODO: Put this union logic in a method on View?
Region? clipAdornments = Margin!.Thickness.AsRegion (Margin!.FrameToScreen ());
- clipAdornments?.Combine (Border!.Thickness.AsRegion (Border!.FrameToScreen ()), RegionOp.Union);
- clipAdornments?.Combine (Padding!.Thickness.AsRegion (Padding!.FrameToScreen ()), RegionOp.Union);
- clipAdornments?.Combine (originalClip, RegionOp.Intersect);
+ clipAdornments.Combine (Border!.Thickness.AsRegion (Border!.FrameToScreen ()), RegionOp.Union);
+ clipAdornments.Combine (Padding!.Thickness.AsRegion (Padding!.FrameToScreen ()), RegionOp.Union);
+ clipAdornments.Combine (originalClip, RegionOp.Intersect);
SetClip (clipAdornments);
}
@@ -239,7 +239,7 @@ public partial class View // Drawing APIs
{
// We do not attempt to draw Margin. It is drawn in a separate pass.
- // Each of these renders lines to this View's LineCanvas
+ // Each of these renders lines to this View's LineCanvas
// Those lines will be finally rendered in OnRenderLineCanvas
if (Border is { } && Border.Thickness != Thickness.Empty)
{
@@ -660,7 +660,7 @@ public partial class View // Drawing APIs
Driver.Move (p.Key.X, p.Key.Y);
// TODO: #2616 - Support combining sequences that don't normalize
- AddRune (p.Value.Value.Rune);
+ AddStr (p.Value.Value.Grapheme);
}
}
@@ -687,7 +687,7 @@ public partial class View // Drawing APIs
context!.ClipDrawnRegion (ViewportToScreen (Viewport));
// Exclude the drawn region from the clip
- ExcludeFromClip (context!.GetDrawnRegion ());
+ ExcludeFromClip (context.GetDrawnRegion ());
// Exclude the Border and Padding from the clip
ExcludeFromClip (Border?.Thickness.AsRegion (Border.FrameToScreen ()));
diff --git a/Terminal.Gui/Views/Autocomplete/AutocompleteFilepathContext.cs b/Terminal.Gui/Views/Autocomplete/AutocompleteFilepathContext.cs
index 80481a787..12384e45b 100644
--- a/Terminal.Gui/Views/Autocomplete/AutocompleteFilepathContext.cs
+++ b/Terminal.Gui/Views/Autocomplete/AutocompleteFilepathContext.cs
@@ -12,16 +12,16 @@ internal class AutocompleteFilepathContext (string currentLine, int cursorPositi
internal class FilepathSuggestionGenerator : ISuggestionGenerator
{
- private FileDialogState state;
+ private FileDialogState _state;
public IEnumerable GenerateSuggestions (AutocompleteContext context)
{
if (context is AutocompleteFilepathContext fileState)
{
- state = fileState.State;
+ _state = fileState.State;
}
- if (state is null)
+ if (_state is null)
{
return Enumerable.Empty ();
}
@@ -42,7 +42,7 @@ internal class FilepathSuggestionGenerator : ISuggestionGenerator
return Enumerable.Empty ();
}
- if (term.Equals (state?.Directory?.Name))
+ if (term.Equals (_state?.Directory?.Name))
{
// Clear suggestions
return Enumerable.Empty ();
@@ -50,13 +50,13 @@ internal class FilepathSuggestionGenerator : ISuggestionGenerator
bool isWindows = RuntimeInformation.IsOSPlatform (OSPlatform.Windows);
- string [] suggestions = state.Children.Where (d => !d.IsParent)
- .Select (
- e => e.FileSystemInfo is IDirectoryInfo d
- ? d.Name + Path.DirectorySeparatorChar
- : e.FileSystemInfo.Name
- )
- .ToArray ();
+ string [] suggestions = _state!.Children.Where (d => !d.IsParent)
+ .Select (
+ e => e.FileSystemInfo is IDirectoryInfo d
+ ? d.Name + Path.DirectorySeparatorChar
+ : e.FileSystemInfo.Name
+ )
+ .ToArray ();
string [] validSuggestions = suggestions
.Where (
@@ -82,9 +82,9 @@ internal class FilepathSuggestionGenerator : ISuggestionGenerator
.ToList ();
}
- public bool IsWordChar (Rune rune)
+ public bool IsWordChar (string text)
{
- if (rune.Value == '\n')
+ if (text == "\n")
{
return false;
}
diff --git a/Terminal.Gui/Views/Autocomplete/ISuggestionGenerator.cs b/Terminal.Gui/Views/Autocomplete/ISuggestionGenerator.cs
index e8eedd2ee..79f62045e 100644
--- a/Terminal.Gui/Views/Autocomplete/ISuggestionGenerator.cs
+++ b/Terminal.Gui/Views/Autocomplete/ISuggestionGenerator.cs
@@ -8,9 +8,9 @@ public interface ISuggestionGenerator
IEnumerable GenerateSuggestions (AutocompleteContext context);
///
- /// Returns if is a character that would continue autocomplete
+ /// Returns if is a character that would continue autocomplete
/// suggesting. Returns if it is a 'breaking' character (i.e. terminating current word
/// boundary)
///
- bool IsWordChar (Rune rune);
+ bool IsWordChar (string text);
}
diff --git a/Terminal.Gui/Views/Autocomplete/PopupAutocomplete.cs b/Terminal.Gui/Views/Autocomplete/PopupAutocomplete.cs
index 87f39fc2b..8a7ca9d3e 100644
--- a/Terminal.Gui/Views/Autocomplete/PopupAutocomplete.cs
+++ b/Terminal.Gui/Views/Autocomplete/PopupAutocomplete.cs
@@ -188,7 +188,7 @@ public abstract partial class PopupAutocomplete : AutocompleteBase
/// trueif the key can be handled falseotherwise.
public override bool ProcessKey (Key key)
{
- if (SuggestionGenerator.IsWordChar ((Rune)key))
+ if (SuggestionGenerator.IsWordChar (key.AsRune.ToString ()))
{
Visible = true;
_closed = false;
diff --git a/Terminal.Gui/Views/Autocomplete/SingleWordSuggestionGenerator.cs b/Terminal.Gui/Views/Autocomplete/SingleWordSuggestionGenerator.cs
index 59bde624b..fc9504027 100644
--- a/Terminal.Gui/Views/Autocomplete/SingleWordSuggestionGenerator.cs
+++ b/Terminal.Gui/Views/Autocomplete/SingleWordSuggestionGenerator.cs
@@ -18,10 +18,10 @@ public class SingleWordSuggestionGenerator : ISuggestionGenerator
// if there is nothing to pick from
if (AllSuggestions.Count == 0)
{
- return Enumerable.Empty ();
+ return [];
}
- List line = context.CurrentLine.Select (c => c.Rune).ToList ();
+ List line = context.CurrentLine.Select (c => c.Grapheme).ToList ();
string currentWord = IdxToWord (line, context.CursorPosition, out int startIdx);
context.CursorPosition = startIdx < 1 ? startIdx : Math.Min (startIdx + 1, line.Count);
@@ -44,9 +44,13 @@ public class SingleWordSuggestionGenerator : ISuggestionGenerator
/// Return true if the given symbol should be considered part of a word and can be contained in matches. Base
/// behavior is to use
///
- /// The rune.
+ /// The text.
///
- public virtual bool IsWordChar (Rune rune) { return char.IsLetterOrDigit ((char)rune.Value); }
+ public virtual bool IsWordChar (string text)
+ {
+ return !string.IsNullOrEmpty (text)
+ && Rune.IsLetterOrDigit (text.EnumerateRunes ().First ());
+ }
///
///
@@ -65,7 +69,7 @@ public class SingleWordSuggestionGenerator : ISuggestionGenerator
/// The start index of the word.
///
///
- protected virtual string IdxToWord (List line, int idx, out int startIdx, int columnOffset = 0)
+ protected virtual string IdxToWord (List line, int idx, out int startIdx, int columnOffset = 0)
{
var sb = new StringBuilder ();
startIdx = idx;
@@ -94,7 +98,7 @@ public class SingleWordSuggestionGenerator : ISuggestionGenerator
{
if (IsWordChar (line [startIdx]))
{
- sb.Insert (0, (char)line [startIdx].Value);
+ sb.Insert (0, line [startIdx]);
}
else
{
diff --git a/Terminal.Gui/Views/CharMap/CharMap.cs b/Terminal.Gui/Views/CharMap/CharMap.cs
index bf54252cf..370c50c6b 100644
--- a/Terminal.Gui/Views/CharMap/CharMap.cs
+++ b/Terminal.Gui/Views/CharMap/CharMap.cs
@@ -147,10 +147,7 @@ public class CharMap : View, IDesignable
break;
}
- var rune = new Rune (cp);
- Span utf16 = new char [2];
- rune.EncodeToUtf16 (utf16);
- UnicodeCategory cat = CharUnicodeInfo.GetUnicodeCategory (utf16 [0]);
+ UnicodeCategory cat = CharUnicodeInfo.GetUnicodeCategory (cp);
if (cat == ShowUnicodeCategory.Value)
{
anyVisible = true;
@@ -684,7 +681,7 @@ public class CharMap : View, IDesignable
// Don't render out-of-range scalars
if (scalar > MAX_CODE_POINT)
{
- AddRune (' ');
+ AddStr (" ");
if (visibleRow == selectedRowIndex && col == selectedCol)
{
SetAttributeForRole (VisualRole.Normal);
@@ -692,22 +689,20 @@ public class CharMap : View, IDesignable
continue;
}
- var rune = (Rune)'?';
+ string grapheme = "?";
if (Rune.IsValid (scalar))
{
- rune = new (scalar);
+ grapheme = new Rune (scalar).ToString ();
}
- int width = rune.GetColumns ();
+ int width = grapheme.GetColumns ();
// Compute visibility based on ShowUnicodeCategory
bool isVisible = Rune.IsValid (scalar);
if (isVisible && ShowUnicodeCategory.HasValue)
{
- Span filterUtf16 = new char [2];
- rune.EncodeToUtf16 (filterUtf16);
- UnicodeCategory cat = CharUnicodeInfo.GetUnicodeCategory (filterUtf16 [0]);
+ UnicodeCategory cat = CharUnicodeInfo.GetUnicodeCategory (scalar);
isVisible = cat == ShowUnicodeCategory.Value;
}
@@ -716,11 +711,11 @@ public class CharMap : View, IDesignable
// Glyph row
if (isVisible)
{
- RenderRune (rune, width);
+ RenderGrapheme (grapheme, width, scalar);
}
else
{
- AddRune (' ');
+ AddStr (" ");
}
}
else
@@ -735,7 +730,7 @@ public class CharMap : View, IDesignable
}
else
{
- AddRune (' ');
+ AddStr (" ");
}
}
@@ -749,21 +744,18 @@ public class CharMap : View, IDesignable
return true;
- void RenderRune (Rune rune, int width)
+ void RenderGrapheme (string grapheme, int width, int scalar)
{
// Get the UnicodeCategory
- Span utf16 = new char [2];
- int charCount = rune.EncodeToUtf16 (utf16);
-
// Get the bidi class for the first code unit
// For most bidi characters, the first code unit is sufficient
- UnicodeCategory category = CharUnicodeInfo.GetUnicodeCategory (utf16 [0]);
+ UnicodeCategory category = CharUnicodeInfo.GetUnicodeCategory (scalar);
switch (category)
{
case UnicodeCategory.OtherNotAssigned:
SetAttributeForRole (VisualRole.Highlight);
- AddRune (Rune.ReplacementChar);
+ AddStr (Rune.ReplacementChar.ToString ());
SetAttributeForRole (VisualRole.Normal);
break;
@@ -772,7 +764,7 @@ public class CharMap : View, IDesignable
// These report width of 0 and don't render on their own.
case UnicodeCategory.Format:
SetAttributeForRole (VisualRole.Highlight);
- AddRune ('F');
+ AddStr ("F");
SetAttributeForRole (VisualRole.Normal);
break;
@@ -785,36 +777,7 @@ public class CharMap : View, IDesignable
case UnicodeCategory.EnclosingMark:
if (width > 0)
{
- AddRune (rune);
- }
- else
- {
- if (rune.IsCombiningMark ())
- {
- // This is a hack to work around the fact that combining marks
- // a) can't be rendered on their own
- // b) that don't normalize are not properly supported in
- // any known terminal (esp Windows/AtlasEngine).
- // See Issue #2616
- var sb = new StringBuilder ();
- sb.Append ('a');
- sb.Append (rune);
-
- // Try normalizing after combining with 'a'. If it normalizes, at least
- // it'll show on the 'a'. If not, just show the replacement char.
- string normal = sb.ToString ().Normalize (NormalizationForm.FormC);
-
- if (normal.Length == 1)
- {
- AddRune ((Rune)normal [0]);
- }
- else
- {
- SetAttributeForRole (VisualRole.Highlight);
- AddRune ('M');
- SetAttributeForRole (VisualRole.Normal);
- }
- }
+ AddStr (grapheme);
}
break;
@@ -824,20 +787,28 @@ public class CharMap : View, IDesignable
case UnicodeCategory.LineSeparator:
case UnicodeCategory.ParagraphSeparator:
case UnicodeCategory.Surrogate:
- AddRune (rune);
+ AddStr (grapheme);
break;
+ case UnicodeCategory.OtherLetter:
+ AddStr (grapheme);
+ if (width == 0)
+ {
+ AddStr (" ");
+ }
+
+ break;
default:
// Draw the rune
if (width > 0)
{
- AddRune (rune);
+ AddStr (grapheme);
}
else
{
- throw new InvalidOperationException ($"The Rune \"{rune}\" (U+{rune.Value:x6}) has zero width and no special-case UnicodeCategory logic applies.");
+ throw new InvalidOperationException ($"The Rune \"{grapheme}\" (U+{Rune.GetRuneAt (grapheme, 0).Value:x6}) has zero width and no special-case UnicodeCategory logic applies.");
}
break;
diff --git a/Terminal.Gui/Views/Slider/Slider.cs b/Terminal.Gui/Views/Slider/Slider.cs
index 3f379790a..985f9d16a 100644
--- a/Terminal.Gui/Views/Slider/Slider.cs
+++ b/Terminal.Gui/Views/Slider/Slider.cs
@@ -74,13 +74,13 @@ public class Slider : View, IOrientation
switch (_config._sliderOrientation)
{
case Orientation.Horizontal:
- Style.SpaceChar = new () { Rune = Glyphs.HLine }; // '─'
- Style.OptionChar = new () { Rune = Glyphs.BlackCircle }; // '┼●🗹□⏹'
+ Style.SpaceChar = new () { Grapheme = Glyphs.HLine.ToString () }; // '─'
+ Style.OptionChar = new () { Grapheme = Glyphs.BlackCircle.ToString () }; // '┼●🗹□⏹'
break;
case Orientation.Vertical:
- Style.SpaceChar = new () { Rune = Glyphs.VLine };
- Style.OptionChar = new () { Rune = Glyphs.BlackCircle };
+ Style.SpaceChar = new () { Grapheme = Glyphs.VLine.ToString () };
+ Style.OptionChar = new () { Grapheme = Glyphs.BlackCircle.ToString () };
break;
}
@@ -105,12 +105,12 @@ public class Slider : View, IOrientation
*/
_config._legendsOrientation = _config._sliderOrientation;
- Style.EmptyChar = new () { Rune = new (' ') };
- Style.SetChar = new () { Rune = Glyphs.ContinuousMeterSegment }; // ■
- Style.RangeChar = new () { Rune = Glyphs.Stipple }; // ░ ▒ ▓ // Medium shade not blinking on curses.
- Style.StartRangeChar = new () { Rune = Glyphs.ContinuousMeterSegment };
- Style.EndRangeChar = new () { Rune = Glyphs.ContinuousMeterSegment };
- Style.DragChar = new () { Rune = Glyphs.Diamond };
+ Style.EmptyChar = new () { Grapheme = " " };
+ Style.SetChar = new () { Grapheme = Glyphs.ContinuousMeterSegment.ToString () }; // ■
+ Style.RangeChar = new () { Grapheme = Glyphs.Stipple.ToString () }; // ░ ▒ ▓ // Medium shade not blinking on curses.
+ Style.StartRangeChar = new () { Grapheme = Glyphs.ContinuousMeterSegment.ToString () };
+ Style.EndRangeChar = new () { Grapheme = Glyphs.ContinuousMeterSegment.ToString () };
+ Style.DragChar = new () { Grapheme = Glyphs.Diamond.ToString () };
// TODO: Support left & right (top/bottom)
// First = '├',
@@ -256,11 +256,11 @@ public class Slider : View, IOrientation
switch (_config._sliderOrientation)
{
case Orientation.Horizontal:
- Style.SpaceChar = new () { Rune = Glyphs.HLine }; // '─'
+ Style.SpaceChar = new () { Grapheme = Glyphs.HLine.ToString () }; // '─'
break;
case Orientation.Vertical:
- Style.SpaceChar = new () { Rune = Glyphs.VLine };
+ Style.SpaceChar = new () { Grapheme = Glyphs.VLine.ToString () };
break;
}
@@ -799,7 +799,7 @@ public class Slider : View, IOrientation
if (_dragPosition.HasValue && _moveRenderPosition.HasValue)
{
- AddRune (_moveRenderPosition.Value.X, _moveRenderPosition.Value.Y, Style.DragChar.Rune);
+ AddStr (_moveRenderPosition.Value.X, _moveRenderPosition.Value.Y, Style.DragChar.Grapheme);
}
return true;
@@ -875,11 +875,11 @@ public class Slider : View, IOrientation
? Style.RangeChar.Attribute ?? normalAttr
: Style.SpaceChar.Attribute ?? normalAttr
);
- Rune rune = isSet && _config._type == SliderType.LeftRange ? Style.RangeChar.Rune : Style.SpaceChar.Rune;
+ string text = isSet && _config._type == SliderType.LeftRange ? Style.RangeChar.Grapheme : Style.SpaceChar.Grapheme;
for (var i = 0; i < _config._startSpacing; i++)
{
- MoveAndAdd (x, y, rune);
+ MoveAndAdd (x, y, text);
if (isVertical)
{
@@ -897,7 +897,7 @@ public class Slider : View, IOrientation
for (var i = 0; i < _config._startSpacing; i++)
{
- MoveAndAdd (x, y, Style.EmptyChar.Rune);
+ MoveAndAdd (x, y, Style.EmptyChar.Grapheme);
if (isVertical)
{
@@ -951,25 +951,25 @@ public class Slider : View, IOrientation
drawRange ? Style.RangeChar.Attribute ?? setAttr : Style.OptionChar.Attribute ?? normalAttr
);
- Rune rune = drawRange ? Style.RangeChar.Rune : Style.OptionChar.Rune;
+ string text = drawRange ? Style.RangeChar.Grapheme : Style.OptionChar.Grapheme;
if (isSet)
{
if (_setOptions [0] == i)
{
- rune = Style.StartRangeChar.Rune;
+ text = Style.StartRangeChar.Grapheme;
}
else if (_setOptions.Count > 1 && _setOptions [1] == i)
{
- rune = Style.EndRangeChar.Rune;
+ text = Style.EndRangeChar.Grapheme;
}
else if (_setOptions.Contains (i))
{
- rune = Style.SetChar.Rune;
+ text = Style.SetChar.Grapheme;
}
}
- MoveAndAdd (x, y, rune);
+ MoveAndAdd (x, y, text);
if (isVertical)
{
@@ -992,7 +992,7 @@ public class Slider : View, IOrientation
for (var s = 0; s < _config._cachedInnerSpacing; s++)
{
- MoveAndAdd (x, y, drawRange && isSet ? Style.RangeChar.Rune : Style.SpaceChar.Rune);
+ MoveAndAdd (x, y, drawRange && isSet ? Style.RangeChar.Grapheme : Style.SpaceChar.Grapheme);
if (isVertical)
{
@@ -1017,11 +1017,11 @@ public class Slider : View, IOrientation
? Style.RangeChar.Attribute ?? normalAttr
: Style.SpaceChar.Attribute ?? normalAttr
);
- Rune rune = isSet && _config._type == SliderType.RightRange ? Style.RangeChar.Rune : Style.SpaceChar.Rune;
+ string text = isSet && _config._type == SliderType.RightRange ? Style.RangeChar.Grapheme : Style.SpaceChar.Grapheme;
for (var i = 0; i < remaining; i++)
{
- MoveAndAdd (x, y, rune);
+ MoveAndAdd (x, y, text);
if (isVertical)
{
@@ -1039,7 +1039,7 @@ public class Slider : View, IOrientation
for (var i = 0; i < remaining; i++)
{
- MoveAndAdd (x, y, Style.EmptyChar.Rune);
+ MoveAndAdd (x, y, Style.EmptyChar.Grapheme);
if (isVertical)
{
diff --git a/Terminal.Gui/Views/TableView/TreeTableSource.cs b/Terminal.Gui/Views/TableView/TreeTableSource.cs
index 8c6925399..61e15f78a 100644
--- a/Terminal.Gui/Views/TableView/TreeTableSource.cs
+++ b/Terminal.Gui/Views/TableView/TreeTableSource.cs
@@ -88,14 +88,14 @@ public class TreeTableSource : IEnumerableTableSource, IDisposable where T
{
Branch branch = RowToBranch (row);
- // Everything on line before the expansion run and branch text
- Rune [] prefix = branch.GetLinePrefix ().ToArray ();
- Rune expansion = branch.GetExpandableSymbol ();
+ // Everything on the line before the expansion run and branch text
+ string [] prefix = branch.GetLinePrefix ().ToArray ();
+ string expansion = branch.GetExpandableSymbol ();
string lineBody = _tree.AspectGetter (branch.Model) ?? "";
var sb = new StringBuilder ();
- foreach (Rune p in prefix)
+ foreach (string p in prefix)
{
sb.Append (p);
}
diff --git a/Terminal.Gui/Views/TextInput/TextField.cs b/Terminal.Gui/Views/TextInput/TextField.cs
index 37a92062b..38d123c19 100644
--- a/Terminal.Gui/Views/TextInput/TextField.cs
+++ b/Terminal.Gui/Views/TextInput/TextField.cs
@@ -17,7 +17,7 @@ public class TextField : View, IDesignable
private int _selectedStart; // -1 represents there is no text selection.
private string _selectedText;
private int _start;
- private List _text;
+ private List _text;
///
/// Initializes a new instance of the class.
@@ -541,7 +541,7 @@ public class TextField : View, IDesignable
ClearAllSelection ();
// Note we use NewValue here; TextChanging subscribers may have changed it
- _text = args.Result.EnumerateRunes ().ToList ();
+ _text = args.Result.ToStringList ();
if (!Secret && !_historyText.IsFromHistory)
{
@@ -629,7 +629,7 @@ public class TextField : View, IDesignable
}
Clipboard.Contents = SelectedText;
- List newText = DeleteSelectedText ();
+ List newText = DeleteSelectedText ();
Text = StringExtensions.ToString (newText);
Adjust ();
}
@@ -700,7 +700,7 @@ public class TextField : View, IDesignable
}
else
{
- List newText = DeleteSelectedText ();
+ List newText = DeleteSelectedText ();
Text = StringExtensions.ToString (newText);
Adjust ();
}
@@ -734,7 +734,7 @@ public class TextField : View, IDesignable
}
else
{
- List newText = DeleteSelectedText ();
+ List newText = DeleteSelectedText ();
Text = StringExtensions.ToString (newText);
Adjust ();
}
@@ -943,8 +943,8 @@ public class TextField : View, IDesignable
for (int idx = p; idx < tcount; idx++)
{
- Rune rune = _text [idx];
- int cols = rune.GetColumns ();
+ string text = _text [idx];
+ int cols = text.GetColumns ();
if (!Enabled)
{
@@ -980,7 +980,7 @@ public class TextField : View, IDesignable
if (col + cols <= width)
{
- AddRune (Secret ? Glyphs.Dot : rune);
+ AddStr (Secret ? Glyphs.Dot.ToString () : text);
}
if (!TextModel.SetCol (ref col, width, cols))
@@ -1254,7 +1254,7 @@ public class TextField : View, IDesignable
private void ContextMenu_KeyChanged (object sender, KeyChangedEventArgs e) { KeyBindings.Replace (e.OldKey.KeyCode, e.NewKey.KeyCode); }
- private List DeleteSelectedText ()
+ private List DeleteSelectedText ()
{
SetSelectedStartSelectedLength ();
int selStart = SelectedStart > -1 ? _start : _cursorPosition;
@@ -1270,7 +1270,7 @@ public class TextField : View, IDesignable
ClearAllSelection ();
_cursorPosition = selStart >= newText.GetRuneCount () ? newText.GetRuneCount () : selStart;
- return newText.ToRuneList ();
+ return newText.ToStringList ();
}
private void GenerateSuggestions ()
@@ -1318,7 +1318,7 @@ public class TextField : View, IDesignable
new (_cursorPosition, 0)
);
- List newText = _text;
+ List newText = _text;
if (SelectedLength > 0)
{
@@ -1339,7 +1339,7 @@ public class TextField : View, IDesignable
if (_cursorPosition == newText.Count + 1)
{
- SetText (newText.Concat (kbstr).ToList ());
+ SetText (newText.Concat (kbstr.Select (r => r.ToString ())).ToList ());
}
else
{
@@ -1350,7 +1350,7 @@ public class TextField : View, IDesignable
SetText (
newText.GetRange (0, _preTextChangedCursorPos)
- .Concat (kbstr)
+ .Concat (kbstr.Select (r => r.ToString ()))
.Concat (
newText.GetRange (
_preTextChangedCursorPos,
@@ -1367,7 +1367,7 @@ public class TextField : View, IDesignable
{
SetText (
newText.GetRange (0, _preTextChangedCursorPos)
- .Concat (kbstr)
+ .Concat (kbstr.Select (r => r.ToString ()))
.Concat (
newText.GetRange (
Math.Min (_preTextChangedCursorPos + 1, newText.Count),
@@ -1729,7 +1729,7 @@ public class TextField : View, IDesignable
TitleTextFormatter.Draw (driver: Driver, screen: ViewportToScreen (new Rectangle (0, 0, Viewport.Width, 1)), normalColor: captionAttribute, hotColor: hotKeyAttribute);
}
- private void SetClipboard (IEnumerable text)
+ private void SetClipboard (IEnumerable text)
{
if (!Secret)
{
@@ -1755,8 +1755,8 @@ public class TextField : View, IDesignable
}
}
- private void SetText (List newText) { Text = StringExtensions.ToString (newText); }
- private void SetText (IEnumerable newText) { SetText (newText.ToList ()); }
+ private void SetText (List newText) { Text = StringExtensions.ToString (newText); }
+ private void SetText (IEnumerable newText) { SetText (newText.ToList ()); }
private void ShowContextMenu (bool keyboard)
{
diff --git a/Terminal.Gui/Views/TextInput/TextModel.cs b/Terminal.Gui/Views/TextInput/TextModel.cs
index 81d07848a..296c39579 100644
--- a/Terminal.Gui/Views/TextInput/TextModel.cs
+++ b/Terminal.Gui/Views/TextInput/TextModel.cs
@@ -71,7 +71,7 @@ internal class TextModel
for (int i = first; i < last; i++)
{
List line = GetLine (i);
- int tabSum = line.Sum (c => c.Rune.Value == '\t' ? Math.Max (tabWidth - 1, 0) : 0);
+ int tabSum = line.Sum (c => c.Grapheme == "\t" ? Math.Max (tabWidth - 1, 0) : 0);
int l = line.Count + tabSum;
if (l > maxLength)
@@ -222,7 +222,7 @@ internal class TextModel
if (cell is { })
{
- rune = cell.Value.Rune;
+ rune = Rune.GetRuneAt (cell.Value.Grapheme, 0);
}
else
{
@@ -299,10 +299,11 @@ internal class TextModel
}
List line = GetLine (nRow);
+ Rune firstRune = Rune.GetRuneAt (line [0].Grapheme, 0);
if (nCol == 0
&& nRow == fromRow
- && (Rune.IsLetterOrDigit (line [0].Rune) || Rune.IsPunctuation (line [0].Rune) || Rune.IsSymbol (line [0].Rune)))
+ && (Rune.IsLetterOrDigit (firstRune) || Rune.IsPunctuation (firstRune) || Rune.IsSymbol (firstRune)))
{
return;
}
@@ -366,7 +367,7 @@ internal class TextModel
try
{
- Rune rune = _lines [row].Count > 0 ? RuneAt (col, row)!.Value.Rune : default (Rune);
+ Rune rune = _lines [row].Count > 0 ? Rune.GetRuneAt (RuneAt (col, row)!.Value.Grapheme, 0) : default (Rune);
RuneType runeType = GetRuneType (rune);
int lastValidCol = IsSameRuneType (rune, runeType, useSameRuneType) && (Rune.IsLetterOrDigit (rune) || Rune.IsPunctuation (rune) || Rune.IsSymbol (rune))
@@ -425,10 +426,11 @@ internal class TextModel
}
List line = GetLine (nRow);
+ Rune firstRune = Rune.GetRuneAt (line [0].Grapheme, 0);
if (nCol == line.Count
&& nRow == fromRow
- && (Rune.IsLetterOrDigit (line [0].Rune) || Rune.IsPunctuation (line [0].Rune) || Rune.IsSymbol (line [0].Rune)))
+ && (Rune.IsLetterOrDigit (firstRune) || Rune.IsPunctuation (firstRune) || Rune.IsSymbol (firstRune)))
{
return;
}
@@ -475,10 +477,10 @@ internal class TextModel
}
if (startCol > 0
- && StringExtensions.ToString (line.GetRange (startCol, col - startCol).Select (c => c.Rune).ToList ()).Trim () == ""
- && (col - startCol > 1 || (col - startCol > 0 && line [startCol - 1].Rune == (Rune)' ')))
+ && StringExtensions.ToString (line.GetRange (startCol, col - startCol).Select (c => c.Grapheme).ToList ()).Trim () == ""
+ && (col - startCol > 1 || (col - startCol > 0 && line [startCol - 1].Grapheme == " ")))
{
- while (startCol > 0 && line [startCol - 1].Rune == (Rune)' ')
+ while (startCol > 0 && line [startCol - 1].Grapheme == " ")
{
startCol--;
}
@@ -495,13 +497,13 @@ internal class TextModel
if (selectWordOnly)
{
- List selRunes = line.GetRange (startCol, col - startCol).Select (c => c.Rune).ToList ();
+ List selText = line.GetRange (startCol, col - startCol).Select (c => c.Grapheme).ToList ();
- if (StringExtensions.ToString (selRunes).Trim () != "")
+ if (StringExtensions.ToString (selText).Trim () != "")
{
- for (int i = selRunes.Count - 1; i > -1; i--)
+ for (int i = selText.Count - 1; i > -1; i--)
{
- if (selRunes [i] == (Rune)' ')
+ if (selText [i] == " ")
{
col--;
}
@@ -519,18 +521,18 @@ internal class TextModel
internal static int CalculateLeftColumn (List t, int start, int end, int width, int tabWidth = 0)
{
- List runes = new ();
+ List strings = new ();
foreach (Cell cell in t)
{
- runes.Add (cell.Rune);
+ strings.Add (cell.Grapheme);
}
- return CalculateLeftColumn (runes, start, end, width, tabWidth);
+ return CalculateLeftColumn (strings, start, end, width, tabWidth);
}
// Returns the left column in a range of the string.
- internal static int CalculateLeftColumn (List t, int start, int end, int width, int tabWidth = 0)
+ internal static int CalculateLeftColumn (List t, int start, int end, int width, int tabWidth = 0)
{
if (t is null || t.Count == 0)
{
@@ -538,15 +540,15 @@ internal class TextModel
}
var size = 0;
- int tcount = end > t.Count - 1 ? t.Count - 1 : end;
+ int tCount = end > t.Count - 1 ? t.Count - 1 : end;
var col = 0;
- for (int i = tcount; i >= 0; i--)
+ for (int i = tCount; i >= 0; i--)
{
- Rune rune = t [i];
- size += rune.GetColumns ();
+ string text = t [i];
+ size += text.GetColumns (false);
- if (rune.Value == '\t')
+ if (text == "\t")
{
size += tabWidth + 1;
}
@@ -576,23 +578,23 @@ internal class TextModel
List t,
int start = -1,
int end = -1,
- bool checkNextRune = true,
+ bool checkNextText = true,
int tabWidth = 0
)
{
- List runes = new ();
+ List strings = new ();
foreach (Cell cell in t)
{
- runes.Add (cell.Rune);
+ strings.Add (cell.Grapheme);
}
- return DisplaySize (runes, start, end, checkNextRune, tabWidth);
+ return DisplaySize (strings, start, end, checkNextText, tabWidth);
}
// Returns the size and length in a range of the string.
internal static (int size, int length) DisplaySize (
- List t,
+ List t,
int start = -1,
int end = -1,
bool checkNextRune = true,
@@ -607,35 +609,35 @@ internal class TextModel
var size = 0;
var len = 0;
- int tcount = end == -1 ? t.Count :
+ int tCount = end == -1 ? t.Count :
end > t.Count ? t.Count : end;
int i = start == -1 ? 0 : start;
- for (; i < tcount; i++)
+ for (; i < tCount; i++)
{
- Rune rune = t [i];
- size += rune.GetColumns ();
- len += rune.GetEncodingLength (Encoding.Unicode);
+ string text = t [i];
+ size += text.GetColumns (false);
+ len += text.Length;
- if (rune.Value == '\t')
+ if (text == "\t")
{
size += tabWidth + 1;
len += tabWidth - 1;
}
- if (checkNextRune && i == tcount - 1 && t.Count > tcount && IsWideRune (t [i + 1], tabWidth, out int s, out int l))
+ if (checkNextRune && i == tCount - 1 && t.Count > tCount && IsWideText (t [i + 1], tabWidth, out int s, out int l))
{
size += s;
len += l;
}
}
- bool IsWideRune (Rune r, int tWidth, out int s, out int l)
+ bool IsWideText (string s1, int tWidth, out int s, out int l)
{
- s = r.GetColumns ();
- l = r.GetEncodingLength ();
+ s = s1.GetColumns ();
+ l = Encoding.Unicode.GetByteCount (s1);
- if (r.Value == '\t')
+ if (s1 == "\t")
{
s += tWidth + 1;
l += tWidth - 1;
@@ -744,17 +746,17 @@ internal class TextModel
internal static int GetColFromX (List t, int start, int x, int tabWidth = 0)
{
- List runes = new ();
+ List strings = new ();
foreach (Cell cell in t)
{
- runes.Add (cell.Rune);
+ strings.Add (cell.Grapheme);
}
- return GetColFromX (runes, start, x, tabWidth);
+ return GetColFromX (strings, start, x, tabWidth);
}
- internal static int GetColFromX (List t, int start, int x, int tabWidth = 0)
+ internal static int GetColFromX (List t, int start, int x, int tabWidth = 0)
{
if (x < 0)
{
@@ -766,10 +768,10 @@ internal class TextModel
for (int i = start; i < t.Count; i++)
{
- Rune r = t [i];
- size += r.GetColumns ();
+ string s = t [i];
+ size += s.GetColumns ();
- if (r.Value == '\t')
+ if (s == "\t")
{
size += tabWidth + 1;
}
@@ -1055,18 +1057,21 @@ internal class TextModel
if (col + 1 < line.Count)
{
col++;
- rune = line [col].Rune;
+ rune = Rune.GetRuneAt (line [col].Grapheme, 0);
+ Rune prevRune = Rune.GetRuneAt (line [col - 1].Grapheme, 0);
if (col + 1 == line.Count
&& !Rune.IsLetterOrDigit (rune)
- && !Rune.IsWhiteSpace (line [col - 1].Rune)
- && IsSameRuneType (line [col - 1].Rune, GetRuneType (rune), useSameRuneType))
+ && !Rune.IsWhiteSpace (prevRune)
+ && IsSameRuneType (prevRune, GetRuneType (rune), useSameRuneType))
{
col++;
}
+ prevRune = Rune.GetRuneAt (line [col - 1].Grapheme, 0);
+
if (!Rune.IsWhiteSpace (rune)
- && (Rune.IsWhiteSpace (line [col - 1].Rune) || !IsSameRuneType (line [col - 1].Rune, GetRuneType (rune), useSameRuneType)))
+ && (Rune.IsWhiteSpace (prevRune) || !IsSameRuneType (prevRune, GetRuneType (rune), useSameRuneType)))
{
return false;
}
@@ -1097,12 +1102,13 @@ internal class TextModel
if (col > 0)
{
col--;
- rune = line [col].Rune;
+ rune = Rune.GetRuneAt (line [col].Grapheme, 0);
+ Rune nextRune = Rune.GetRuneAt (line [col + 1].Grapheme, 0);
if ((!Rune.IsWhiteSpace (rune)
- && !Rune.IsWhiteSpace (line [col + 1].Rune)
- && !IsSameRuneType (line [col + 1].Rune, GetRuneType (rune), useSameRuneType))
- || (Rune.IsWhiteSpace (rune) && !Rune.IsWhiteSpace (line [col + 1].Rune)))
+ && !Rune.IsWhiteSpace (nextRune)
+ && !IsSameRuneType (nextRune, GetRuneType (rune), useSameRuneType))
+ || (Rune.IsWhiteSpace (rune) && !Rune.IsWhiteSpace (nextRune)))
{
return false;
}
diff --git a/Terminal.Gui/Views/TextInput/TextView.cs b/Terminal.Gui/Views/TextInput/TextView.cs
index 8b5da5ef3..c2ad7d463 100644
--- a/Terminal.Gui/Views/TextInput/TextView.cs
+++ b/Terminal.Gui/Views/TextInput/TextView.cs
@@ -1481,7 +1481,7 @@ public class TextView : View, IDesignable
}
/// Loads the contents of the list into the .
- /// Rune cells list to load the contents from.
+ /// Text cells list to load the contents from.
public void Load (List cells)
{
SetWrapModel ();
@@ -1801,8 +1801,8 @@ public class TextView : View, IDesignable
for (int idxCol = _leftColumn; idxCol < lineRuneCount; idxCol++)
{
- Rune rune = idxCol >= lineRuneCount ? (Rune)' ' : line [idxCol].Rune;
- int cols = rune.GetColumns ();
+ string text = idxCol >= lineRuneCount ? " " : line [idxCol].Grapheme;
+ int cols = text.GetColumns (false);
if (idxCol < line.Count && IsSelecting && PointInSelection (idxCol, idxRow))
{
@@ -1821,7 +1821,7 @@ public class TextView : View, IDesignable
OnDrawNormalColor (line, idxCol, idxRow);
}
- if (rune.Value == '\t')
+ if (text == "\t")
{
cols += TabWidth + 1;
@@ -1840,7 +1840,7 @@ public class TextView : View, IDesignable
}
else
{
- AddRune (col, row, rune);
+ AddStr (col, row, text);
// Ensures that cols less than 0 to be 1 because it will be converted to a printable rune
cols = Math.Max (cols, 1);
@@ -1851,7 +1851,7 @@ public class TextView : View, IDesignable
break;
}
- if (idxCol + 1 < lineRuneCount && col + line [idxCol + 1].Rune.GetColumns () > right)
+ if (idxCol + 1 < lineRuneCount && col + line [idxCol + 1].Grapheme.GetColumns () > right)
{
break;
}
@@ -2047,9 +2047,9 @@ public class TextView : View, IDesignable
break;
}
- int cols = line [idx].Rune.GetColumns ();
+ int cols = line [idx].Grapheme.GetColumns ();
- if (line [idx].Rune.Value == '\t')
+ if (line [idx].Grapheme == "\t")
{
cols += TabWidth + 1;
}
@@ -2806,12 +2806,12 @@ public class TextView : View, IDesignable
cells = line.GetRange (startCol, endCol - startCol);
cellsList.Add (cells);
- return StringFromRunes (cells);
+ return StringFromCells (cells);
}
cells = line.GetRange (startCol, line.Count - startCol);
cellsList.Add (cells);
- string res = StringFromRunes (cells);
+ string res = StringFromCells (cells);
for (int row = startRow + 1; row < maxRow; row++)
{
@@ -2821,14 +2821,14 @@ public class TextView : View, IDesignable
res = res
+ Environment.NewLine
- + StringFromRunes (cells);
+ + StringFromCells (cells);
}
line = model is null ? _model.GetLine (maxRow) : model.GetLine (maxRow);
cellsList.AddRange ([]);
cells = line.GetRange (0, endCol);
cellsList.Add (cells);
- res = res + Environment.NewLine + StringFromRunes (cells);
+ res = res + Environment.NewLine + StringFromCells (cells);
return res;
}
@@ -3108,7 +3108,7 @@ public class TextView : View, IDesignable
{
if (Used)
{
- Insert (new () { Rune = a.AsRune, Attribute = attribute });
+ Insert (new () { Grapheme = a.AsRune.ToString (), Attribute = attribute });
CurrentColumn++;
if (CurrentColumn >= _leftColumn + Viewport.Width)
@@ -3119,7 +3119,7 @@ public class TextView : View, IDesignable
}
else
{
- Insert (new () { Rune = a.AsRune, Attribute = attribute });
+ Insert (new () { Grapheme = a.AsRune.ToString (), Attribute = attribute });
CurrentColumn++;
}
}
@@ -3207,7 +3207,7 @@ public class TextView : View, IDesignable
int restCount = currentLine.Count - CurrentColumn;
List rest = currentLine.GetRange (CurrentColumn, restCount);
var val = string.Empty;
- val += StringFromRunes (rest);
+ val += StringFromCells (rest);
if (_lastWasKill)
{
@@ -3313,7 +3313,7 @@ public class TextView : View, IDesignable
int restCount = CurrentColumn;
List rest = currentLine.GetRange (0, restCount);
var val = string.Empty;
- val += StringFromRunes (rest);
+ val += StringFromCells (rest);
if (_lastWasKill)
{
@@ -3842,7 +3842,7 @@ public class TextView : View, IDesignable
List currentLine = GetCurrentLine ();
- if (currentLine.Count > 0 && currentLine [CurrentColumn - 1].Rune.Value == '\t')
+ if (currentLine.Count > 0 && currentLine[CurrentColumn - 1].Grapheme == "\t")
{
_historyText.Add (new () { new (currentLine) }, CursorPosition);
@@ -4601,29 +4601,28 @@ public class TextView : View, IDesignable
_isButtonShift = false;
}
- private string StringFromRunes (List cells)
+ private string StringFromCells (List| cells)
{
- if (cells is null)
- {
- throw new ArgumentNullException (nameof (cells));
- }
+ ArgumentNullException.ThrowIfNull (cells);
var size = 0;
-
foreach (Cell cell in cells)
{
- size += cell.Rune.GetEncodingLength ();
+ string t = cell.Grapheme;
+ size += Encoding.Unicode.GetByteCount (t);
}
- var encoded = new byte [size];
+ byte [] encoded = new byte [size];
var offset = 0;
-
foreach (Cell cell in cells)
{
- offset += cell.Rune.Encode (encoded, offset);
+ string t = cell.Grapheme;
+ int bytesWritten = Encoding.Unicode.GetBytes (t, 0, t.Length, encoded, offset);
+ offset += bytesWritten;
}
- return StringExtensions.ToString (encoded);
+ // decode using the same encoding and the bytes actually written
+ return Encoding.Unicode.GetString (encoded, 0, offset);
}
private void TextView_SuperViewChanged (object sender, SuperViewChangedEventArgs e)
diff --git a/Terminal.Gui/Views/TreeView/Branch.cs b/Terminal.Gui/Views/TreeView/Branch.cs
index 9c48a0a0d..481adafac 100644
--- a/Terminal.Gui/Views/TreeView/Branch.cs
+++ b/Terminal.Gui/Views/TreeView/Branch.cs
@@ -87,9 +87,9 @@ internal class Branch where T : class
isSelected ? _tree.HasFocus ? _tree.GetAttributeForRole (VisualRole.Focus) : _tree.GetAttributeForRole (VisualRole.HotNormal) : _tree.GetAttributeForRole (VisualRole.Normal);
Attribute symbolColor = _tree.Style.HighlightModelTextOnly ? _tree.GetAttributeForRole (VisualRole.Normal) : textColor;
- // Everything on line before the expansion run and branch text
- Rune [] prefix = GetLinePrefix ().ToArray ();
- Rune expansion = GetExpandableSymbol ();
+ // Everything on the line before the expansion run and branch text
+ string [] prefix = GetLinePrefix ().ToArray ();
+ string expansion = GetExpandableSymbol ();
string lineBody = _tree.AspectGetter (Model) ?? "";
_tree.Move (0, y);
@@ -99,7 +99,7 @@ internal class Branch where T : class
Attribute attr = symbolColor;
// Draw the line prefix (all parallel lanes or whitespace and an expand/collapse/leaf symbol)
- foreach (Rune r in prefix)
+ foreach (string s in prefix)
{
if (toSkip > 0)
{
@@ -107,8 +107,8 @@ internal class Branch where T : class
}
else
{
- cells.Add (NewCell (attr, r));
- availableWidth -= r.GetColumns ();
+ cells.Add (NewCell (attr, s));
+ availableWidth -= s.GetColumns ();
}
}
@@ -212,7 +212,7 @@ internal class Branch where T : class
}
attr = modelColor;
- cells.AddRange (lineBody.Select (r => NewCell (attr, new (r))));
+ cells.AddRange (lineBody.Select (c => NewCell (attr, c.ToString ())));
if (availableWidth > 0)
{
@@ -220,7 +220,7 @@ internal class Branch where T : class
cells.AddRange (
Enumerable.Repeat (
- NewCell (attr, new (' ')),
+ NewCell (attr, " "),
availableWidth
)
);
@@ -243,7 +243,7 @@ internal class Branch where T : class
foreach (Cell cell in cells)
{
_tree.SetAttribute ((Attribute)cell.Attribute!);
- _tree.AddRune (cell.Rune);
+ _tree.AddStr (cell.Grapheme);
}
}
@@ -288,21 +288,21 @@ internal class Branch where T : class
/// object to indicate whether it or not (or it is a leaf).
/// | | | | | | | | | | | |
///
- public Rune GetExpandableSymbol ()
+ public string GetExpandableSymbol ()
{
Rune leafSymbol = _tree.Style.ShowBranchLines ? Glyphs.HLine : (Rune)' ';
if (IsExpanded)
{
- return _tree.Style.CollapseableSymbol ?? leafSymbol;
+ return _tree.Style.CollapseableSymbol.ToString () ?? leafSymbol.ToString ();
}
if (CanExpand ())
{
- return _tree.Style.ExpandableSymbol ?? leafSymbol;
+ return _tree.Style.ExpandableSymbol.ToString () ?? leafSymbol.ToString ();
}
- return leafSymbol;
+ return leafSymbol.ToString ();
}
///
@@ -409,14 +409,14 @@ internal class Branch where T : class
/// any tree branches (if enabled).
///
///
- internal IEnumerable GetLinePrefix ()
+ internal IEnumerable GetLinePrefix ()
{
// If not showing line branches or this is a root object.
if (!_tree.Style.ShowBranchLines)
{
for (var i = 0; i < Depth; i++)
{
- yield return new (' ');
+ yield return new (" ");
}
yield break;
@@ -427,23 +427,23 @@ internal class Branch where T : class
{
if (cur.IsLast ())
{
- yield return new (' ');
+ yield return new (" ");
}
else
{
- yield return Glyphs.VLine;
+ yield return Glyphs.VLine.ToString ();
}
- yield return new (' ');
+ yield return new (" ");
}
if (IsLast ())
{
- yield return Glyphs.LLCorner;
+ yield return Glyphs.LLCorner.ToString ();
}
else
{
- yield return Glyphs.LeftTee;
+ yield return Glyphs.LeftTee.ToString ();
}
}
@@ -531,5 +531,5 @@ internal class Branch where T : class
return Parent.ChildBranches.LastOrDefault () == this;
}
- private static Cell NewCell (Attribute attr, Rune r) { return new () { Rune = r, Attribute = new (attr) }; }
+ private static Cell NewCell (Attribute attr, string s) { return new () { Grapheme = s, Attribute = new (attr) }; }
}
diff --git a/Tests/UnitTests/DriverAssert.cs b/Tests/UnitTests/DriverAssert.cs
index 4e7795b13..7bac03f05 100644
--- a/Tests/UnitTests/DriverAssert.cs
+++ b/Tests/UnitTests/DriverAssert.cs
@@ -198,7 +198,7 @@ internal partial class DriverAssert
IDriver? driver = null
)
{
- List> lines = [];
+ List> lines = [];
var sb = new StringBuilder ();
driver ??= Application.Driver!;
@@ -211,13 +211,13 @@ internal partial class DriverAssert
for (var rowIndex = 0; rowIndex < driver.Rows; rowIndex++)
{
- List runes = [];
+ List strings = [];
for (var colIndex = 0; colIndex < driver.Cols; colIndex++)
{
- Rune runeAtCurrentLocation = contents! [rowIndex, colIndex].Rune;
+ string textAtCurrentLocation = contents! [rowIndex, colIndex].Grapheme;
- if (runeAtCurrentLocation != _spaceRune)
+ if (textAtCurrentLocation != _spaceRune.ToString ())
{
if (x == -1)
{
@@ -226,11 +226,11 @@ internal partial class DriverAssert
for (var i = 0; i < colIndex; i++)
{
- runes.InsertRange (i, [_spaceRune]);
+ strings.InsertRange (i, [_spaceRune.ToString ()]);
}
}
- if (runeAtCurrentLocation.GetColumns () > 1)
+ if (textAtCurrentLocation.GetColumns () > 1)
{
colIndex++;
}
@@ -245,18 +245,13 @@ internal partial class DriverAssert
if (x > -1)
{
- runes.Add (runeAtCurrentLocation);
+ strings.Add (textAtCurrentLocation);
}
-
- // See Issue #2616
- //foreach (var combMark in contents [r, c].CombiningMarks) {
- // runes.Add (combMark);
- //}
}
- if (runes.Count > 0)
+ if (strings.Count > 0)
{
- lines.Add (runes);
+ lines.Add (strings);
}
}
@@ -270,13 +265,13 @@ internal partial class DriverAssert
}
// Remove trailing whitespace on each line
- foreach (List row in lines)
+ foreach (List row in lines)
{
for (int c = row.Count - 1; c >= 0; c--)
{
- Rune rune = row [c];
+ string text = row [c];
- if (rune != (Rune)' ' || row.Sum (x => x.GetColumns ()) == w)
+ if (text != " " || row.Sum (x => x.GetColumns ()) == w)
{
break;
}
@@ -285,7 +280,7 @@ internal partial class DriverAssert
}
}
- // Convert Rune list to string
+ // Convert Text list to string
for (var r = 0; r < lines.Count; r++)
{
var line = StringExtensions.ToString (lines [r]);
diff --git a/Tests/UnitTests/Drivers/ClipRegionTests.cs b/Tests/UnitTests/Drivers/ClipRegionTests.cs
index 013cdbe7a..def6bdde0 100644
--- a/Tests/UnitTests/Drivers/ClipRegionTests.cs
+++ b/Tests/UnitTests/Drivers/ClipRegionTests.cs
@@ -16,24 +16,24 @@ public class ClipRegionTests (ITestOutputHelper output)
Application.Driver!.Move (0, 0);
Application.Driver!.AddRune ('x');
- Assert.Equal ((Rune)'x', Application.Driver!.Contents! [0, 0].Rune);
+ Assert.Equal ("x", Application.Driver!.Contents! [0, 0].Grapheme);
Application.Driver?.Move (5, 5);
Application.Driver?.AddRune ('x');
- Assert.Equal ((Rune)'x', Application.Driver!.Contents [5, 5].Rune);
+ Assert.Equal ("x", Application.Driver!.Contents [5, 5].Grapheme);
// Clear the contents
Application.Driver?.FillRect (new Rectangle (0, 0, Application.Driver.Rows, Application.Driver.Cols), ' ');
- Assert.Equal ((Rune)' ', Application.Driver?.Contents [0, 0].Rune);
+ Assert.Equal (" ", Application.Driver?.Contents [0, 0].Grapheme);
// Setup the region with a single rectangle, fill screen with 'x'
Application.Driver!.Clip = new (new Rectangle (5, 5, 5, 5));
Application.Driver.FillRect (new Rectangle (0, 0, Application.Driver.Rows, Application.Driver.Cols), 'x');
- Assert.Equal ((Rune)' ', Application.Driver?.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', Application.Driver?.Contents [4, 9].Rune);
- Assert.Equal ((Rune)'x', Application.Driver?.Contents [5, 5].Rune);
- Assert.Equal ((Rune)'x', Application.Driver?.Contents [9, 9].Rune);
- Assert.Equal ((Rune)' ', Application.Driver?.Contents [10, 10].Rune);
+ Assert.Equal (" ", Application.Driver?.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", Application.Driver?.Contents [4, 9].Grapheme);
+ Assert.Equal ("x", Application.Driver?.Contents [5, 5].Grapheme);
+ Assert.Equal ("x", Application.Driver?.Contents [9, 9].Grapheme);
+ Assert.Equal (" ", Application.Driver?.Contents [10, 10].Grapheme);
Application.Shutdown ();
}
diff --git a/Tests/UnitTests/View/Draw/ClipTests.cs b/Tests/UnitTests/View/Draw/ClipTests.cs
index 4e3f62e60..1efec5d43 100644
--- a/Tests/UnitTests/View/Draw/ClipTests.cs
+++ b/Tests/UnitTests/View/Draw/ClipTests.cs
@@ -49,17 +49,17 @@ public class ClipTests (ITestOutputHelper _output)
view.Draw ();
// Only valid location w/in Viewport is 0, 0 (view) - 2, 2 (screen)
- Assert.Equal ((Rune)' ', Application.Driver?.Contents! [2, 2].Rune);
+ Assert.Equal (" ", Application.Driver?.Contents! [2, 2].Grapheme);
// When we exit Draw, the view is excluded from the clip. So drawing at 0,0, is not valid and is clipped.
view.AddRune (0, 0, Rune.ReplacementChar);
- Assert.Equal ((Rune)' ', Application.Driver?.Contents! [2, 2].Rune);
+ Assert.Equal (" ", Application.Driver?.Contents! [2, 2].Grapheme);
view.AddRune (-1, -1, Rune.ReplacementChar);
- Assert.Equal ((Rune)'P', Application.Driver?.Contents! [1, 1].Rune);
+ Assert.Equal ("P", Application.Driver?.Contents! [1, 1].Grapheme);
view.AddRune (1, 1, Rune.ReplacementChar);
- Assert.Equal ((Rune)'P', Application.Driver?.Contents! [3, 3].Rune);
+ Assert.Equal ("P", Application.Driver?.Contents! [3, 3].Grapheme);
}
[Theory]
@@ -233,7 +233,7 @@ public class ClipTests (ITestOutputHelper _output)
// 01 2345678901234 56 78 90 12 34 56
// │� |0123456989│� ン ラ イ ン で す 。
expectedOutput = """
- │�│0123456789│�ンラインです。
+ │�│0123456789│ ンラインです。
""";
DriverAssert.AssertDriverContentsWithFrameAre (expectedOutput, _output);
diff --git a/Tests/UnitTests/View/Draw/DrawTests.cs b/Tests/UnitTests/View/Draw/DrawTests.cs
index 0e84371d5..6a8a13325 100644
--- a/Tests/UnitTests/View/Draw/DrawTests.cs
+++ b/Tests/UnitTests/View/Draw/DrawTests.cs
@@ -14,19 +14,19 @@ public class DrawTests (ITestOutputHelper output)
[Trait ("Category", "Unicode")]
public void CJK_Compatibility_Ideographs_ConsoleWidth_ColumnWidth_Equal_Two ()
{
- const string us = "\U0000f900";
+ const string s = "\U0000f900";
var r = (Rune)0xf900;
- Assert.Equal ("豈", us);
+ Assert.Equal ("豈", s);
Assert.Equal ("豈", r.ToString ());
- Assert.Equal (us, r.ToString ());
+ Assert.Equal (s, r.ToString ());
- Assert.Equal (2, us.GetColumns ());
+ Assert.Equal (2, s.GetColumns ());
Assert.Equal (2, r.GetColumns ());
- var win = new Window { Title = us };
+ var win = new Window { Title = s };
var view = new View { Text = r.ToString (), Height = Dim.Fill (), Width = Dim.Fill () };
- var tf = new TextField { Text = us, Y = 1, Width = 3 };
+ var tf = new TextField { Text = s, Y = 1, Width = 3 };
win.Add (view, tf);
Toplevel top = new ();
top.Add (win);
@@ -36,9 +36,9 @@ public class DrawTests (ITestOutputHelper output)
const string expectedOutput = """
- ┌┤豈├────┐
- │豈 │
- │豈 │
+ ┌┤豈├────┐
+ │豈 │
+ │豈 │
└────────┘
""";
DriverAssert.AssertDriverContentsWithFrameAre (expectedOutput, output);
diff --git a/Tests/UnitTests/View/TextTests.cs b/Tests/UnitTests/View/TextTests.cs
index 625d0ce49..dba01c151 100644
--- a/Tests/UnitTests/View/TextTests.cs
+++ b/Tests/UnitTests/View/TextTests.cs
@@ -1,4 +1,5 @@
-using UnitTests;
+using System.Text;
+using UnitTests;
using Xunit.Abstractions;
namespace UnitTests.ViewTests;
@@ -699,14 +700,14 @@ w ";
string GetContents ()
{
- var text = "";
+ var sb = new StringBuilder ();
for (var i = 0; i < 4; i++)
{
- text += Application.Driver?.Contents [0, i].Rune;
+ sb.Append (Application.Driver?.Contents! [0, i].Grapheme);
}
- return text;
+ return sb.ToString ();
}
Application.End (rs);
diff --git a/Tests/UnitTests/Views/LabelTests.cs b/Tests/UnitTests/Views/LabelTests.cs
index 7b949c459..bdda95498 100644
--- a/Tests/UnitTests/Views/LabelTests.cs
+++ b/Tests/UnitTests/Views/LabelTests.cs
@@ -171,7 +171,7 @@ This TextFormatter (tf2) is rewritten. ",
[AutoInitShutdown]
public void Label_Draw_Horizontal_Simple_Runes ()
{
- var label = new Label { Text = "Demo Simple Rune" };
+ var label = new Label { Text = "Demo Simple Text" };
var top = new Toplevel ();
top.Add (label);
Application.Begin (top);
@@ -180,7 +180,7 @@ This TextFormatter (tf2) is rewritten. ",
Assert.Equal (new (0, 0, 16, 1), label.Frame);
var expected = @"
-Demo Simple Rune
+Demo Simple Text
";
Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output);
@@ -190,9 +190,9 @@ Demo Simple Rune
[Fact]
[AutoInitShutdown]
- public void Label_Draw_Vertical_Simple_Runes ()
+ public void Label_Draw_Vertical_Simple_Text ()
{
- var label = new Label { TextDirection = TextDirection.TopBottom_LeftRight, Text = "Demo Simple Rune" };
+ var label = new Label { TextDirection = TextDirection.TopBottom_LeftRight, Text = "Demo Simple Text" };
var top = new Toplevel ();
top.Add (label);
Application.Begin (top);
@@ -213,10 +213,10 @@ p
l
e
-R
-u
-n
+T
e
+x
+t
";
Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output);
diff --git a/Tests/UnitTests/Views/ProgressBarTests.cs b/Tests/UnitTests/Views/ProgressBarTests.cs
index b7bb6aaa2..7f4e7b1b7 100644
--- a/Tests/UnitTests/Views/ProgressBarTests.cs
+++ b/Tests/UnitTests/Views/ProgressBarTests.cs
@@ -46,57 +46,57 @@ public class ProgressBarTests
if (i == 0)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
}
else if (i == 1)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
}
else if (i == 2)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
}
else if (i == 3)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
}
else if (i == 4)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
}
else if (i == 5)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
}
}
}
@@ -185,687 +185,687 @@ public class ProgressBarTests
if (i == 0)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 1)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 2)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 3)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 4)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 5)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 6)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 7)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 8)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 9)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 10)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 11)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 12)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 13)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 14)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 15)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 16)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 17)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 18)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 19)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 20)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 21)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 22)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 23)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 24)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 25)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 26)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 27)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 28)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 29)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 30)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 31)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 32)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 33)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 34)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 35)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 36)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 37)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
}
}
@@ -894,687 +894,687 @@ public class ProgressBarTests
if (i == 0)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 1)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 2)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 3)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 4)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 5)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 6)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 7)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 8)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 9)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 10)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 11)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 12)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 13)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 14)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 15)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 16)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 17)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 18)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 19)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 20)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 21)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 22)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 14].Grapheme);
}
else if (i == 23)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 24)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 25)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 26)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 27)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 28)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 29)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 30)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 31)
{
- Assert.Equal ((Rune)' ', driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (" ", driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 32)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 33)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 34)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 35)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 36)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
else if (i == 37)
{
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 0].Rune);
- Assert.Equal (Glyphs.BlocksMeterSegment, driver.Contents [0, 1].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 2].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 3].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 4].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 5].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 6].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 7].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 8].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 9].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 10].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 11].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 12].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 13].Rune);
- Assert.Equal ((Rune)' ', driver.Contents [0, 14].Rune);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 0].Grapheme);
+ Assert.Equal (Glyphs.BlocksMeterSegment.ToString (), driver.Contents [0, 1].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 2].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 3].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 4].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 5].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 6].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 7].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 8].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 9].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 10].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 11].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 12].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 13].Grapheme);
+ Assert.Equal (" ", driver.Contents [0, 14].Grapheme);
}
}
}
diff --git a/Tests/UnitTests/Views/TextFieldTests.cs b/Tests/UnitTests/Views/TextFieldTests.cs
index 922178409..d41de3152 100644
--- a/Tests/UnitTests/Views/TextFieldTests.cs
+++ b/Tests/UnitTests/Views/TextFieldTests.cs
@@ -95,6 +95,7 @@ public class TextFieldTests (ITestOutputHelper output)
Assert.Equal (11, caption.Length);
Assert.Equal (10, caption.EnumerateRunes ().Sum (c => c.GetColumns ()));
+ Assert.Equal (10, caption.GetColumns ());
TextField tf = GetTextFieldsInView ();
diff --git a/Tests/UnitTests/Views/TextViewTests.cs b/Tests/UnitTests/Views/TextViewTests.cs
index 5d03983eb..80f185fb4 100644
--- a/Tests/UnitTests/Views/TextViewTests.cs
+++ b/Tests/UnitTests/Views/TextViewTests.cs
@@ -6922,7 +6922,7 @@ line.
{
string [] lines = _textView.Text.Split (Environment.NewLine);
- if (lines == null || lines.Length == 0)
+ if (lines is { Length: 0 })
{
return 0;
}
@@ -7034,11 +7034,11 @@ line.
List> text =
[
Cell.ToCells (
- "This is the first line.".ToRunes ()
+ "This is the first line.".ToStringList ()
),
Cell.ToCells (
- "This is the second line.".ToRunes ()
+ "This is the second line.".ToStringList ()
)
];
TextView tv = CreateTextView ();
@@ -7101,12 +7101,9 @@ line. ",
{
string csName = color.Key;
- foreach (Rune rune in csName.EnumerateRunes ())
- {
- cells.Add (new () { Rune = rune, Attribute = color.Value.Normal });
- }
+ cells.AddRange (Cell.ToCellList (csName, color.Value.Normal));
- cells.Add (new () { Rune = (Rune)'\n', Attribute = color.Value.Focus });
+ cells.Add (new () { Grapheme = "\n", Attribute = color.Value.Focus });
}
TextView tv = CreateTextView ();
diff --git a/Tests/UnitTests/Views/TreeViewTests.cs b/Tests/UnitTests/Views/TreeViewTests.cs
index f57330054..0e115751b 100644
--- a/Tests/UnitTests/Views/TreeViewTests.cs
+++ b/Tests/UnitTests/Views/TreeViewTests.cs
@@ -979,10 +979,10 @@ public class TreeViewTests (ITestOutputHelper output)
Assert.All (eventArgs, ea => Assert.Equal (ea.Tree, tv));
Assert.All (eventArgs, ea => Assert.False (ea.Handled));
- Assert.Equal ("├-root one", eventArgs [0].Cells.Aggregate ("", (s, n) => s += n.Rune).TrimEnd ());
- Assert.Equal ("│ ├─leaf 1", eventArgs [1].Cells.Aggregate ("", (s, n) => s += n.Rune).TrimEnd ());
- Assert.Equal ("│ └─leaf 2", eventArgs [2].Cells.Aggregate ("", (s, n) => s += n.Rune).TrimEnd ());
- Assert.Equal ("└─root two", eventArgs [3].Cells.Aggregate ("", (s, n) => s += n.Rune).TrimEnd ());
+ Assert.Equal ("├-root one", eventArgs [0].Cells.Aggregate ("", (s, n) => s += n.Grapheme).TrimEnd ());
+ Assert.Equal ("│ ├─leaf 1", eventArgs [1].Cells.Aggregate ("", (s, n) => s += n.Grapheme).TrimEnd ());
+ Assert.Equal ("│ └─leaf 2", eventArgs [2].Cells.Aggregate ("", (s, n) => s += n.Grapheme).TrimEnd ());
+ Assert.Equal ("└─root two", eventArgs [3].Cells.Aggregate ("", (s, n) => s += n.Grapheme).TrimEnd ());
Assert.Equal (1, eventArgs [0].IndexOfExpandCollapseSymbol);
Assert.Equal (3, eventArgs [1].IndexOfExpandCollapseSymbol);
@@ -1092,9 +1092,9 @@ oot two
Assert.All (eventArgs, ea => Assert.Equal (ea.Tree, tv));
Assert.All (eventArgs, ea => Assert.False (ea.Handled));
- Assert.Equal ("─leaf 1", eventArgs [0].Cells.Aggregate ("", (s, n) => s += n.Rune).TrimEnd ());
- Assert.Equal ("─leaf 2", eventArgs [1].Cells.Aggregate ("", (s, n) => s += n.Rune).TrimEnd ());
- Assert.Equal ("oot two", eventArgs [2].Cells.Aggregate ("", (s, n) => s += n.Rune).TrimEnd ());
+ Assert.Equal ("─leaf 1", eventArgs [0].Cells.Aggregate ("", (s, n) => s += n.Grapheme).TrimEnd ());
+ Assert.Equal ("─leaf 2", eventArgs [1].Cells.Aggregate ("", (s, n) => s += n.Grapheme).TrimEnd ());
+ Assert.Equal ("oot two", eventArgs [2].Cells.Aggregate ("", (s, n) => s += n.Grapheme).TrimEnd ());
Assert.Equal (0, eventArgs [0].IndexOfExpandCollapseSymbol);
Assert.Equal (0, eventArgs [1].IndexOfExpandCollapseSymbol);
diff --git a/Tests/UnitTestsParallelizable/Drawing/CellTests.cs b/Tests/UnitTestsParallelizable/Drawing/CellTests.cs
index 13a088a13..b51ab37a9 100644
--- a/Tests/UnitTestsParallelizable/Drawing/CellTests.cs
+++ b/Tests/UnitTestsParallelizable/Drawing/CellTests.cs
@@ -1,17 +1,39 @@
using System.Text;
-using Xunit.Abstractions;
namespace UnitTests_Parallelizable.DrawingTests;
-public class CellTests ()
+public class CellTests
{
[Fact]
public void Constructor_Defaults ()
{
var c = new Cell ();
Assert.True (c is { });
- Assert.Equal (0, c.Rune.Value);
+ Assert.Empty (c.Runes);
Assert.Null (c.Attribute);
+ Assert.False (c.IsDirty);
+ Assert.Null (c.Grapheme);
+ }
+
+ [Theory]
+ [InlineData (null, new uint [] { })]
+ [InlineData ("", new uint [] { })]
+ [InlineData ("a", new uint [] { 0x0061 })]
+ [InlineData ("👩❤️💋👨", new uint [] { 0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468 })]
+ [InlineData ("æ", new uint [] { 0x00E6 })]
+ [InlineData ("a︠", new uint [] { 0x0061, 0xFE20 })]
+ [InlineData ("e︡", new uint [] { 0x0065, 0xFE21 })]
+ public void Runes_From_Grapheme (string grapheme, uint [] expected)
+ {
+ // Arrange
+ var c = new Cell { Grapheme = grapheme };
+
+ // Act
+ Rune [] runes = expected.Select (u => new Rune (u)).ToArray ();
+
+ // Assert
+ Assert.Equal (grapheme, c.Grapheme);
+ Assert.Equal (runes, c.Runes);
}
[Fact]
@@ -21,32 +43,138 @@ public class CellTests ()
var c2 = new Cell
{
- Rune = new ('a'), Attribute = new (Color.Red)
+ Grapheme = "a", Attribute = new (Color.Red)
};
Assert.False (c1.Equals (c2));
Assert.False (c2.Equals (c1));
- c1.Rune = new ('a');
+ c1.Grapheme = "a";
c1.Attribute = new ();
- Assert.Equal (c1.Rune, c2.Rune);
+ Assert.Equal (c1.Grapheme, c2.Grapheme);
Assert.False (c1.Equals (c2));
Assert.False (c2.Equals (c1));
}
[Fact]
- public void ToString_Override ()
+ public void Set_Text_With_Invalid_Grapheme_Throws ()
{
- var c1 = new Cell ();
-
- var c2 = new Cell
- {
- Rune = new ('a'), Attribute = new (Color.Red)
- };
- Assert.Equal ("['\0':]", c1.ToString ());
-
- Assert.Equal (
- "['a':[Red,Red,None]]",
- c2.ToString ()
- );
+ Assert.Throws (() => new Cell { Grapheme = "ab" });
+ Assert.Throws (() => new Cell { Grapheme = "\u0061\u0062" }); // ab
}
+
+ [Theory]
+ [MemberData (nameof (ToStringTestData))]
+ public void ToString_Override (string text, Attribute? attribute, string expected)
+ {
+ var c = new Cell (attribute, true, text);
+ string result = c.ToString ();
+
+ Assert.Equal (expected, result);
+ }
+
+ public static IEnumerable | | | | | | | | | | | |