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.heightening.levels.[value].damage",
|
||||||
"Item.spell.system.overlays",
|
"Item.spell.system.overlays",
|
||||||
"Item.spell.system.overlays.[value].system.damage",
|
"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))
|
if (CheckPath(node, DictionaryPaths))
|
||||||
{
|
{
|
||||||
@@ -54,7 +61,7 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
|
|||||||
return new FoundryRulesSchemaType(node);
|
return new FoundryRulesSchemaType(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
return base.Resolve(node, value);
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,8 +103,18 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
|||||||
}
|
}
|
||||||
|
|
||||||
var newType = Resolver.Resolve(this, value);
|
var newType = Resolver.Resolve(this, value);
|
||||||
newType.AddValue(value);
|
|
||||||
|
if (newType.IsCompatibleValue(value))
|
||||||
|
{
|
||||||
Types.Add(newType);
|
Types.Add(newType);
|
||||||
|
newType.AddValue(value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var fallbackType = Resolver.Resolve(this, value, true);
|
||||||
|
Types.Add(fallbackType);
|
||||||
|
fallbackType.AddValue(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -58,23 +58,45 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
|||||||
return value.Type;
|
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>
|
||||||
/// Определение типа поля.
|
/// Определение типа поля.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="node">Поле схемы данных, для которого создаётся тип.</param>
|
/// <param name="node">Поле схемы данных, для которого создаётся тип.</param>
|
||||||
/// <param name="value">Добавляемое значение.</param>
|
/// <param name="value">Добавляемое значение.</param>
|
||||||
|
/// <param name="disableResolve">Добавляемое значение.</param>
|
||||||
/// <returns>Новый тип для схемы данных</returns>
|
/// <returns>Новый тип для схемы данных</returns>
|
||||||
/// <exception cref="ArgumentNullException">
|
/// <exception cref="ArgumentNullException">
|
||||||
/// Возникает, если у `value` значение идентично `null`
|
/// Возникает, если у `value` значение идентично `null`
|
||||||
/// (такие значения должны обрабаотываться в `SchemaNode`).
|
/// (такие значения должны обрабаотываться в `SchemaNode`).
|
||||||
/// </exception>
|
/// </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);
|
var type = TokenType(value);
|
||||||
|
|
||||||
if (type == JTokenType.Null)
|
if (type == JTokenType.Null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException();
|
throw new ArgumentNullException(nameof(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
return type switch
|
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, [
|
return string.Join("\n" + Tab, [
|
||||||
base.ToString(),
|
base.ToString(),
|
||||||
"Key:" + Indent(KeyNode.ToString()),
|
"#key : " + Indent(KeyNode.ToString()),
|
||||||
"Value:" + Indent(ItemNode.ToString())
|
"#value : " + Indent(ItemNode.ToString())
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
|||||||
|
|
||||||
result += $" ({count} different values)";
|
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();
|
return result.Trim();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user