0.443.0.409841

This commit is contained in:
CloneTrooper1019
2020-08-14 12:35:27 -05:00
parent 0a6c8f38d4
commit 0ca6738cb9
12 changed files with 512 additions and 2105 deletions

View File

@ -9,7 +9,7 @@ namespace RobloxFiles.XmlFormat
{
public static class XmlPropertyTokens
{
public static IReadOnlyDictionary<string, IXmlPropertyToken> Handlers;
private static readonly Dictionary<string, IXmlPropertyToken> Handlers = new Dictionary<string, IXmlPropertyToken>();
static XmlPropertyTokens()
{
@ -25,22 +25,24 @@ namespace RobloxFiles.XmlFormat
.Select(handlerType => Activator.CreateInstance(handlerType))
.Cast<IXmlPropertyToken>();
var tokenHandlers = new Dictionary<string, IXmlPropertyToken>();
foreach (IXmlPropertyToken propToken in propTokens)
{
var tokens = propToken.Token.Split(';')
.Select(token => token.Trim())
.ToList();
tokens.ForEach(token => tokenHandlers.Add(token, propToken));
tokens.ForEach(token => Handlers.Add(token, propToken));
}
Handlers = tokenHandlers;
}
public static bool ReadPropertyGeneric<T>(XmlNode token, out T outValue) where T : struct
{
if (token == null)
{
var name = nameof(token);
throw new ArgumentNullException(name);
}
try
{
string value = token.InnerText;
@ -65,18 +67,22 @@ namespace RobloxFiles.XmlFormat
outValue = (T)result;
return true;
}
catch
catch (NotSupportedException)
{
outValue = default(T);
outValue = default;
return false;
}
}
public static bool ReadPropertyGeneric<T>(Property prop, PropertyType propType, XmlNode token) where T : struct
{
T result;
if (prop == null)
{
var name = nameof(prop);
throw new ArgumentNullException(name);
}
if (ReadPropertyGeneric(token, out result))
if (ReadPropertyGeneric(token, out T result))
{
prop.Type = propType;
prop.Value = result;