Fixed mixed dictionary
This commit is contained in:
+10
-3
@@ -39,10 +39,17 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
|
||||
"Item.spell.system.heightening.levels.[value].damage",
|
||||
"Item.spell.system.overlays",
|
||||
"Item.spell.system.overlays.[value].system.damage",
|
||||
"Item.spell.system.overlays.[value].system.heightening"
|
||||
"Item.spell.system.overlays.[value].system.heightening",
|
||||
"Item.spell.system.overlays.[value].system.heightening.[value]"
|
||||
];
|
||||
|
||||
public override AbstractSchemaType Resolve(SchemaNode node, JToken? value)
|
||||
/// <summary>
|
||||
/// Частное определение типа поля.
|
||||
/// </summary>
|
||||
/// <param name="node">Поле схемы данных, для которого создаётся тип.</param>
|
||||
/// <param name="value">Добавляемое значение.</param>
|
||||
/// <returns>Новый тип для схемы данных. `null`, что бы использовать значение по умолчанию</returns>
|
||||
protected override AbstractSchemaType? CustomResolve(SchemaNode node, JToken? value)
|
||||
{
|
||||
if (CheckPath(node, DictionaryPaths))
|
||||
{
|
||||
@@ -54,7 +61,7 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
|
||||
return new FoundryRulesSchemaType(node);
|
||||
}
|
||||
|
||||
return base.Resolve(node, value);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,8 +103,18 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
||||
}
|
||||
|
||||
var newType = Resolver.Resolve(this, value);
|
||||
newType.AddValue(value);
|
||||
Types.Add(newType);
|
||||
|
||||
if (newType.IsCompatibleValue(value))
|
||||
{
|
||||
Types.Add(newType);
|
||||
newType.AddValue(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
var fallbackType = Resolver.Resolve(this, value, true);
|
||||
Types.Add(fallbackType);
|
||||
fallbackType.AddValue(value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -58,23 +58,45 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
||||
return value.Type;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Частное определение типа поля.
|
||||
/// </summary>
|
||||
/// <param name="node">Поле схемы данных, для которого создаётся тип.</param>
|
||||
/// <param name="value">Добавляемое значение.</param>
|
||||
/// <returns>Новый тип для схемы данных. `null`, что бы использовать значение по умолчанию</returns>
|
||||
protected virtual AbstractSchemaType? CustomResolve(SchemaNode node, JToken? value)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Определение типа поля.
|
||||
/// </summary>
|
||||
/// <param name="node">Поле схемы данных, для которого создаётся тип.</param>
|
||||
/// <param name="value">Добавляемое значение.</param>
|
||||
/// <param name="disableResolve">Добавляемое значение.</param>
|
||||
/// <returns>Новый тип для схемы данных</returns>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// Возникает, если у `value` значение идентично `null`
|
||||
/// (такие значения должны обрабаотываться в `SchemaNode`).
|
||||
/// </exception>
|
||||
public virtual AbstractSchemaType Resolve(SchemaNode node, JToken? value)
|
||||
public AbstractSchemaType Resolve(SchemaNode node, JToken? value, bool disableResolve)
|
||||
{
|
||||
if (!disableResolve)
|
||||
{
|
||||
var customType = this.CustomResolve(node, value);
|
||||
|
||||
if (customType is not null)
|
||||
{
|
||||
return customType;
|
||||
}
|
||||
}
|
||||
|
||||
var type = TokenType(value);
|
||||
|
||||
if (type == JTokenType.Null)
|
||||
{
|
||||
throw new ArgumentNullException();
|
||||
throw new ArgumentNullException(nameof(value));
|
||||
}
|
||||
|
||||
return type switch
|
||||
@@ -85,5 +107,19 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Определение типа поля.
|
||||
/// </summary>
|
||||
/// <param name="node">Поле схемы данных, для которого создаётся тип.</param>
|
||||
/// <param name="value">Добавляемое значение.</param>
|
||||
/// <returns>Новый тип для схемы данных</returns>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// Возникает, если у `value` значение идентично `null`
|
||||
/// (такие значения должны обрабаотываться в `SchemaNode`).
|
||||
/// </exception>
|
||||
public AbstractSchemaType Resolve(SchemaNode node, JToken? value)
|
||||
{
|
||||
return this.Resolve(node, value, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,8 +69,8 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
{
|
||||
return string.Join("\n" + Tab, [
|
||||
base.ToString(),
|
||||
"Key:" + Indent(KeyNode.ToString()),
|
||||
"Value:" + Indent(ItemNode.ToString())
|
||||
"#key : " + Indent(KeyNode.ToString()),
|
||||
"#value : " + Indent(ItemNode.ToString())
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
|
||||
result += $" ({count} different values)";
|
||||
|
||||
if (count is > ElementLimit or <= 0)
|
||||
if (count is > ElementLimit or <= 0 || (Type == JTokenType.String && Values.Any(s => s.ToString().Contains('\n'))))
|
||||
{
|
||||
return result.Trim();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user