fix: '{0}{1}' is now parsed correctly

This commit is contained in:
Mira 2022-11-29 09:04:46 +01:00
parent c21f2dae76
commit 1e4bcb07b0
Signed by untrusted user who does not match committer: Xorog
GPG key ID: 983798ED9C3E7C36

View file

@ -104,7 +104,7 @@ public class Logger : ILogger
LogLevel.TRACE => ConsoleColor.Gray, LogLevel.TRACE => ConsoleColor.Gray,
LogLevel.DEBUG2 => ConsoleColor.Gray, LogLevel.DEBUG2 => ConsoleColor.Gray,
LogLevel.DEBUG => ConsoleColor.Gray, LogLevel.DEBUG => ConsoleColor.Gray,
LogLevel.INFO => ConsoleColor.Green, LogLevel.INFO => ConsoleColor.Cyan,
LogLevel.WARN => ConsoleColor.Yellow, LogLevel.WARN => ConsoleColor.Yellow,
LogLevel.ERROR => ConsoleColor.Red, LogLevel.ERROR => ConsoleColor.Red,
LogLevel.FATAL => ConsoleColor.Black, LogLevel.FATAL => ConsoleColor.Black,
@ -124,46 +124,56 @@ public class Logger : ILogger
int currentArg = 0; int currentArg = 0;
bool inTemplate = false; bool inTemplate = false;
bool attemptedParsing = false;
List<StringPart> builder = new(); List<StringPart> builder = new();
while (leftOver.Length > 0) while (leftOver.Length > 0)
{ {
if (inTemplate && currentLog.Args?.Length >= currentArg) if (inTemplate)
{ {
int endIndex = leftOver.IndexOf('}'); attemptedParsing = true;
if (currentLog.Args?.Length >= currentArg)
{
int endIndex = leftOver.IndexOf('}');
object objectToAdd = currentLog.Args[currentArg]; object objectToAdd = currentLog.Args[currentArg];
currentArg++; currentArg++;
if (objectToAdd.GetType() == typeof(int)) if (objectToAdd.GetType() == typeof(int))
builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan });
else if (objectToAdd.GetType() == typeof(long)) else if (objectToAdd.GetType() == typeof(long))
builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan });
else if (objectToAdd.GetType() == typeof(uint)) else if (objectToAdd.GetType() == typeof(uint))
builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan });
else if (objectToAdd.GetType() == typeof(ulong)) else if (objectToAdd.GetType() == typeof(ulong))
builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan });
else else
builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.DarkGray }); builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.DarkGray });
inTemplate = false; inTemplate = false;
leftOver = leftOver[(endIndex + 1)..]; leftOver = leftOver[(endIndex + 1)..];
continue; attemptedParsing = false;
continue;
}
} }
inTemplate = false; inTemplate = false;
int placeholderIndex = leftOver.IndexOf('{'); int placeholderIndex = leftOver.IndexOf('{');
if (placeholderIndex != -1 && currentLog.Args?.Length >= currentArg) if (placeholderIndex != -1)
inTemplate = true; inTemplate = true;
if (placeholderIndex is -1 or 0 || placeholderIndex > leftOver.Length) if (placeholderIndex == -1 || placeholderIndex > leftOver.Length)
placeholderIndex = leftOver.Length;
if (placeholderIndex == 0 && attemptedParsing)
placeholderIndex = leftOver.Length; placeholderIndex = leftOver.Length;
builder.Add(new StringPart { String = leftOver[..placeholderIndex] }); builder.Add(new StringPart { String = leftOver[..placeholderIndex] });
leftOver = leftOver[placeholderIndex..]; leftOver = leftOver[placeholderIndex..];
attemptedParsing = false;
} }
if (handler.maxLogLevel >= currentLog.LogLevel) if (handler.maxLogLevel >= currentLog.LogLevel)