-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathFormattingHelper.cs
53 lines (45 loc) · 1.83 KB
/
FormattingHelper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UncommonSense.Bc.Utils
{
public static class FormattingHelper
{
public static string FormatObjectIdAvailabilitySummary(ObjectIdAvailabilitySummary summary, bool supportsVirtualTerminal)
{
var stringBuilder = new StringBuilder();
foreach (var item in summary.Items)
{
stringBuilder.AppendLine(
GetObjectIdAvailabilitySummaryItemColumn(item, summary.ConsideredObjectTypes, supportsVirtualTerminal)
.Join(" "));
}
return stringBuilder.ToString();
}
public static IEnumerable<string> GetObjectIdAvailabilitySummaryItemColumn(ObjectIdAvailabilitySummaryItem item, ObjectType[] objectTypes, bool supportsVirtualTerminal)
{
yield return item.ObjectID.ToString();
foreach (var objectType in objectTypes)
{
yield return objectType.ToString().Colorize(supportsVirtualTerminal, item.GetAvailability(objectType));
}
}
public static string Colorize(this string value, bool supportsVirtualTerminal, Availability availability)
{
if (!supportsVirtualTerminal)
return value;
switch (availability)
{
case Availability.Available: return $"\x1B[32m{value}\x1B[0m";
case Availability.Reserved: return $"\x1B[34m{value}\x1B[0m";
case Availability.InUse: return $"\x1B[31m{value}\x1B[0m";
default: return value;
}
}
public static void AppendIf(this StringBuilder stringBuilder, bool condition, string value)
{
if (condition)
stringBuilder.Append(value);
}
}
}