You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 17:36:07 +00:00
C#: Add Ide Connection library and server for the editor
This will be used for communicating between the Godot editor and external IDEs/editors, for things like opening files, triggering hot-reload and running the game with a debugger attached.
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace GodotTools.IdeConnection
|
||||
{
|
||||
public static class MessageParser
|
||||
{
|
||||
public static bool TryParse(string messageLine, out Message message)
|
||||
{
|
||||
var arguments = new List<string>();
|
||||
var stringBuilder = new StringBuilder();
|
||||
|
||||
bool expectingArgument = true;
|
||||
|
||||
for (int i = 0; i < messageLine.Length; i++)
|
||||
{
|
||||
char @char = messageLine[i];
|
||||
|
||||
if (@char == ',')
|
||||
{
|
||||
if (expectingArgument)
|
||||
arguments.Add(string.Empty);
|
||||
|
||||
expectingArgument = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
bool quoted = false;
|
||||
|
||||
if (messageLine[i] == '"')
|
||||
{
|
||||
quoted = true;
|
||||
i++;
|
||||
}
|
||||
|
||||
while (i < messageLine.Length)
|
||||
{
|
||||
@char = messageLine[i];
|
||||
|
||||
if (quoted && @char == '"')
|
||||
{
|
||||
i++;
|
||||
break;
|
||||
}
|
||||
|
||||
if (@char == '\\')
|
||||
{
|
||||
i++;
|
||||
if (i < messageLine.Length)
|
||||
break;
|
||||
|
||||
stringBuilder.Append(messageLine[i]);
|
||||
}
|
||||
else if (!quoted && @char == ',')
|
||||
{
|
||||
break; // We don't increment the counter to allow the colon to be parsed after this
|
||||
}
|
||||
else
|
||||
{
|
||||
stringBuilder.Append(@char);
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
arguments.Add(stringBuilder.ToString());
|
||||
stringBuilder.Clear();
|
||||
|
||||
expectingArgument = false;
|
||||
}
|
||||
|
||||
if (arguments.Count == 0)
|
||||
{
|
||||
message = new Message();
|
||||
return false;
|
||||
}
|
||||
|
||||
message = new Message
|
||||
{
|
||||
Id = arguments[0],
|
||||
Arguments = arguments.Skip(1).ToArray()
|
||||
};
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user