implemented boolean values parsing

This commit is contained in:
Timerix 2025-04-10 16:22:21 +05:00
parent 74d09c51a0
commit c4af1f31e8
3 changed files with 29 additions and 17 deletions

View File

@ -8,6 +8,7 @@ namespace ParadoxSaveParser.Lib;
[JsonSerializable(typeof(string))]
[JsonSerializable(typeof(long))]
[JsonSerializable(typeof(double))]
[JsonSerializable(typeof(bool))]
public partial class ParsedValueJsonContext : JsonSerializerContext
{
}

View File

@ -154,19 +154,29 @@ public class SaveParserEU4
switch (tok.type)
{
case TokenType.StringOrNumber:
// string values can be empty
if(tok.value!.Length == 0)
return string.Empty;
string tokStr = tok.value.ToString();
_stringBuilderPool.Return(tok.value);
if (tokStr[0] != '-' && !char.IsDigit(tokStr[0]))
try
{
// string values can be empty
if (tok.value!.Length == 0)
return string.Empty;
if (tok.value.Equals("yes"))
return true;
if (tok.value.Equals("no"))
return false;
string tokStr = tok.value.ToString();
if (tokStr[0] != '-' && !char.IsDigit(tokStr[0]))
return tokStr;
if (tokStr.Contains('.') && double.TryParse(tokStr, out double d))
return d;
if (long.TryParse(tokStr, out long l))
return l;
return tokStr;
if (tokStr.Contains('.') && double.TryParse(tokStr, out double d))
return d;
if (long.TryParse(tokStr, out long l))
return l;
return tokStr;
}
finally
{
_stringBuilderPool.Return(tok.value!);
}
case TokenType.BracketOpen:
object obj = ParseListOrDict();
return obj;

View File

@ -3,11 +3,12 @@ option csharp_namespace = "ParadoxSaveParser.WebAPI.MyProtobuf";
message Item {
oneof value {
int64 i64 = 1;
double f64 = 2;
string str = 3;
ItemList list = 4;
ItemListMap map = 5;
bool b = 1;
int64 i64 = 2;
double f64 = 3;
string str = 4;
ItemList list = 5;
ItemListMap map = 6;
}
}