Skip to content

Commit

Permalink
imp - Added support for more new lines
Browse files Browse the repository at this point in the history
---

For the less popular new lines, we've added support for splitting by them in a string.

---

Type: imp
Breaking: False
Doc Required: False
Part: 1/1
  • Loading branch information
AptiviCEO committed Apr 18, 2024
1 parent 2256d59 commit 0c3c4c6
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 20 deletions.
72 changes: 54 additions & 18 deletions Textify.Tests/General/TextToolsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -485,71 +485,107 @@ public void TestSplitNewLinesCrLfCrLf()
/// </summary>
[TestMethod]
[Description("Querying")]
public void TestSplitNewLinesOldCrLf()
public void TestUnixifyNewLinesCrLf()
{
string TargetString = "First line\r\nSecond line\r\nThird line";
var TargetArray = TargetString.SplitNewLinesOld();
TargetArray.Length.ShouldBe(3);
var result = TargetString.UnixifyNewLines();
result.ShouldBe("First line\nSecond line\nThird line");
}

/// <summary>
/// Tests splitting a string with new lines (vbLf)
/// </summary>
[TestMethod]
[Description("Querying")]
public void TestSplitNewLinesOldLf()
public void TestUnixifyNewLinesLf()
{
string TargetString = "First line\nSecond line\nThird line";
var TargetArray = TargetString.SplitNewLinesOld();
TargetArray.Length.ShouldBe(3);
var result = TargetString.UnixifyNewLines();
result.ShouldBe("First line\nSecond line\nThird line");
}

/// <summary>
/// Tests splitting a string with new lines (vbCr)
/// </summary>
[TestMethod]
[Description("Querying")]
public void TestSplitNewLinesOldCr()
public void TestUnixifyNewLinesCr()
{
string TargetString = "First line\rSecond line\rThird line";
var TargetArray = TargetString.SplitNewLinesOld();
TargetArray.Length.ShouldNotBe(3);
var result = TargetString.UnixifyNewLines();
result.ShouldBe("First line\nSecond line\nThird line");
}

/// <summary>
/// Tests splitting a string with new lines (vbCrLf + vbCr)
/// </summary>
[TestMethod]
[Description("Querying")]
public void TestSplitNewLinesOldCrLfCr()
public void TestUnixifyNewLinesCrLfCr()
{
string TargetString = "First line\r\n\rSecond line\r\n\rThird line";
var TargetArray = TargetString.SplitNewLinesOld();
TargetArray.Length.ShouldNotBe(5);
var result = TargetString.UnixifyNewLines();
result.ShouldBe("First line\n\nSecond line\n\nThird line");
}

/// <summary>
/// Tests splitting a string with new lines (vbCrLf + vbLf)
/// </summary>
[TestMethod]
[Description("Querying")]
public void TestSplitNewLinesOldCrLfLf()
public void TestUnixifyNewLinesCrLfLf()
{
string TargetString = "First line\r\n\nSecond line\r\n\nThird line";
var TargetArray = TargetString.SplitNewLinesOld();
TargetArray.Length.ShouldBe(5);
var result = TargetString.UnixifyNewLines();
result.ShouldBe("First line\n\nSecond line\n\nThird line");
}

/// <summary>
/// Tests splitting a string with new lines (vbCrLf + vbCrLf)
/// </summary>
[TestMethod]
[Description("Querying")]
public void TestSplitNewLinesOldCrLfCrLf()
public void TestUnixifyNewLinesCrLfCrLf()
{
string TargetString = "First line\r\n\r\nSecond line\r\n\r\nThird line";
var TargetArray = TargetString.SplitNewLinesOld();
TargetArray.Length.ShouldBe(5);
var result = TargetString.UnixifyNewLines();
result.ShouldBe("First line\n\nSecond line\n\nThird line");
}

/// <summary>
/// Tests splitting a string with new lines (VT and FF)
/// </summary>
[TestMethod]
[Description("Querying")]
public void TestUnixifyNewLinesUnusual1()
{
string TargetString = $"First line{Convert.ToChar(11)}Second line{Convert.ToChar(12)}Third line";
var result = TargetString.UnixifyNewLines();
result.ShouldBe("First line\nSecond line\nThird line");
}

/// <summary>
/// Tests splitting a string with new lines (NEL)
/// </summary>
[TestMethod]
[Description("Querying")]
public void TestUnixifyNewLinesUnusual2()
{
string TargetString = $"First line{Convert.ToChar(133)}Second line{Convert.ToChar(133)}Third line";
var result = TargetString.UnixifyNewLines();
result.ShouldBe("First line\nSecond line\nThird line");
}

/// <summary>
/// Tests splitting a string with new lines (LS and PS)
/// </summary>
[TestMethod]
[Description("Querying")]
public void TestUnixifyNewLinesUnusual3()
{
string TargetString = $"First line{Convert.ToChar(0x2028)}Second line{Convert.ToChar(0x2029)}Third line";
var result = TargetString.UnixifyNewLines();
result.ShouldBe("First line\nSecond line\nThird line");
}

/// <summary>
Expand Down
11 changes: 9 additions & 2 deletions Textify/General/TextTools.cs
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ public static string[] SplitNewLines(this string target, bool emptyStrings = tru
/// </summary>
/// <param name="target">Target string</param>
/// <returns>List of words that are separated by the new lines</returns>
[Obsolete("This doesn't properly split Mac OS 9 newlines.")]
public static string[] SplitNewLinesOld(this string target)
{
if (target is null)
Expand All @@ -204,8 +205,14 @@ public static string UnixifyNewLines(this string target)

// Convert Windows (CR+LF) and Mac OS 9 (CR) to Unix (LF)
return target
.Replace($"{Convert.ToChar(13)}{Convert.ToChar(10)}", $"{Convert.ToChar(10)}")
.Replace($"{Convert.ToChar(13)}", $"{Convert.ToChar(10)}");
.Replace($"{Convert.ToChar(13)}{Convert.ToChar(10)}", $"{Convert.ToChar(10)}") // CRLF
.Replace($"{Convert.ToChar(13)}", $"{Convert.ToChar(10)}") // CR
.Replace($"{Convert.ToChar(11)}", $"{Convert.ToChar(10)}") // VT
.Replace($"{Convert.ToChar(12)}", $"{Convert.ToChar(10)}") // FF
.Replace($"{Convert.ToChar(133)}", $"{Convert.ToChar(10)}") // NEL
.Replace($"{Convert.ToChar(0x2028)}", $"{Convert.ToChar(10)}") // LS
.Replace($"{Convert.ToChar(0x2029)}", $"{Convert.ToChar(10)}") // PS
;
}

/// <summary>
Expand Down

0 comments on commit 0c3c4c6

Please sign in to comment.