Skip to content
This repository was archived by the owner on Dec 21, 2023. It is now read-only.

Commit 8b04983

Browse files
committed
Optimize trimming
1 parent c28beea commit 8b04983

File tree

1 file changed

+16
-22
lines changed

1 file changed

+16
-22
lines changed

OpenTabletDriver.Web/TagHelpers/CodeBlockTagHelper.cs

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,38 +33,32 @@ private string TrimPreceding(string value, char character)
3333
{
3434
var lines = value.Split(Environment.NewLine);
3535
var preceding = CountPreceding(lines, character);
36-
var trimmedLines = from line in lines
37-
select TrimPrecedingLine(line, character, preceding);
36+
for (var i = 0; i < lines.Length; ++i)
37+
{
38+
var line = lines[i];
39+
lines[i] = line.Length >= preceding ? line[preceding..] : string.Empty;
40+
}
3841

39-
return string.Join(Environment.NewLine, trimmedLines);
42+
return string.Join(Environment.NewLine, lines);
4043
}
4144

42-
private int CountPreceding(IEnumerable<string> lines, char leadingCharacter)
45+
private static int CountPreceding(string[] lines, char leadingCharacter)
4346
{
47+
var min = int.MaxValue;
4448
foreach (var line in lines)
4549
{
46-
// Make sure that the line actually starts with the leading character
47-
if (line.StartsWith(leadingCharacter) == false)
48-
continue;
49-
50-
// Determine last index of leading character, return if something else is found
51-
for (var i = 0; i < line.Length; i++)
50+
var lineSpan = line.AsSpan();
51+
for (var i = 0; i < lineSpan.Length; ++i)
5252
{
53-
var character = line[i];
54-
if (character != leadingCharacter)
55-
return i;
53+
if (lineSpan[i] != leadingCharacter)
54+
{
55+
min = i < min ? i : min;
56+
break;
57+
}
5658
}
57-
58-
// Assume that this line is the template for trimming
59-
return line.Length;
6059
}
6160

62-
throw new ArgumentException("No lines match the target leading character.", nameof(lines));
63-
}
64-
65-
private string TrimPrecedingLine(string line, char character, int amount)
66-
{
67-
return line.StartsWith(character) ? new string(line.Skip(amount).ToArray()) : line;
61+
return min;
6862
}
6963
}
7064
}

0 commit comments

Comments
 (0)