Документация классов схемы данных
This commit is contained in:
@@ -1,41 +1,76 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Pf2eDataScrapper.SchemaBuilder.Types;
|
||||
|
||||
namespace Pf2eDataScrapper.SchemaBuilder
|
||||
{
|
||||
/// <summary>
|
||||
/// Элемент схемы данных.
|
||||
/// </summary>
|
||||
internal class SchemaNode
|
||||
{
|
||||
/// <summary>
|
||||
/// Отображаемое имя элемента.
|
||||
/// </summary>
|
||||
public string Name = "";
|
||||
|
||||
/// <summary>
|
||||
/// Путь к элементу.
|
||||
/// </summary>
|
||||
public string Path = "";
|
||||
|
||||
/// <summary>
|
||||
/// Родительский элемент.
|
||||
/// </summary>
|
||||
public SchemaNode? Parent = null;
|
||||
|
||||
/// <summary>
|
||||
/// Указание, является ли элемент корневым.
|
||||
/// </summary>
|
||||
public bool Root = false;
|
||||
|
||||
/// <summary>
|
||||
/// Корневой элемент схемы данных.
|
||||
/// </summary>
|
||||
public SchemaNode RootNode => Root ? this : Parent!.RootNode;
|
||||
|
||||
/// <summary>
|
||||
/// Типы данных, использующиеся в элементе.
|
||||
/// </summary>
|
||||
public List<AbstractSchemaType> Types = [];
|
||||
|
||||
/// <summary>
|
||||
/// Указание, может ли этот элемент отсутсвовать в структуре данных.
|
||||
/// </summary>
|
||||
public bool IsNullable = false;
|
||||
|
||||
/// <summary>
|
||||
/// Объект для определения типа поля в схеме данных.
|
||||
/// </summary>
|
||||
public TypeResolver Resolver = new();
|
||||
|
||||
/// <summary>
|
||||
/// Количество значений, добавленных в тип.
|
||||
/// </summary>
|
||||
public int Values { get; protected set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Указание, является ли тип элемента простым.
|
||||
/// </summary>
|
||||
public bool IsSimple => Types.Count == 1;
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор корневого элемента.
|
||||
/// </summary>
|
||||
public SchemaNode()
|
||||
{
|
||||
this.Root = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор элемента схемы данных.
|
||||
/// </summary>
|
||||
/// <param name="parent">Родительский элемент.</param>
|
||||
/// <param name="name">Имя элемента.</param>
|
||||
public SchemaNode(SchemaNode parent, string name)
|
||||
{
|
||||
this.Parent = parent;
|
||||
@@ -44,6 +79,10 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
||||
this.Resolver = parent.Resolver;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление нового возможного значения.
|
||||
/// </summary>
|
||||
/// <param name="value">Добавляемое значение</param>
|
||||
public void AddValue(JToken? value)
|
||||
{
|
||||
if (value is null || Resolver.TokenType(value) == JTokenType.Null)
|
||||
@@ -68,6 +107,10 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
||||
Types.Add(newType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение строкового представоения типа элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представоение типа элемента</returns>
|
||||
public string GetTypeName()
|
||||
{
|
||||
if (IsSimple)
|
||||
@@ -75,11 +118,15 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
||||
return Types[0].GetTypeName();
|
||||
}
|
||||
|
||||
List<string> typeNames = Types.Select(t => t.GetTypeName()).ToList();
|
||||
var typeNames = Types.Select(t => t.GetTypeName()).ToList();
|
||||
|
||||
return string.Join("|", typeNames);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Полное строковое представление элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представление элемента.</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
if (IsSimple)
|
||||
@@ -97,6 +144,9 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
||||
return string.Join("\n" + AbstractSchemaType.Tab, result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подготовка элемента к красивому представлению.
|
||||
/// </summary>
|
||||
public void Beautify()
|
||||
{
|
||||
foreach (var type in Types)
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Pf2eDataScrapper.SchemaBuilder.Types;
|
||||
|
||||
namespace Pf2eDataScrapper.SchemaBuilder
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс для определения типа поля в схеме данных.
|
||||
/// </summary>
|
||||
internal class TypeResolver
|
||||
{
|
||||
/// <summary>
|
||||
/// Проверка соответствия пути.
|
||||
/// </summary>
|
||||
/// <param name="node">Элемент, путь которого проверяется.</param>
|
||||
/// <param name="path">Проверяемый путь. Допускается использование `*` в местах, где допускается любое значение.</param>
|
||||
/// <returns>`true`, если `node.Path` соответсвует указанному в `path` значению.</returns>
|
||||
public bool CheckPath(SchemaNode node, string path)
|
||||
{
|
||||
if (!path.Contains("*"))
|
||||
@@ -28,11 +32,22 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
||||
return !pathParts.Where((t, i) => t != "*" && t != nodeParts[i]).Any();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверка соответствия пути.
|
||||
/// </summary>
|
||||
/// <param name="node">Элемент, путь которого проверяется.</param>
|
||||
/// <param name="paths">Проверяемые пути. Допускается использование `*` в местах, где допускается любое значение.</param>
|
||||
/// <returns>`true`, если `node.Path` соответсвует хотя бы одному указанному в `paths` значению.</returns>
|
||||
public bool CheckPath(SchemaNode node, ICollection<string> paths)
|
||||
{
|
||||
return paths.Any(path => CheckPath(node, path));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение типа значения.
|
||||
/// </summary>
|
||||
/// <param name="value">Значение.</param>
|
||||
/// <returns>Типа значения.</returns>
|
||||
public JTokenType TokenType(JToken? value)
|
||||
{
|
||||
if (value is null || value.Type is JTokenType.Null or JTokenType.Undefined or JTokenType.None)
|
||||
@@ -43,13 +58,23 @@ namespace Pf2eDataScrapper.SchemaBuilder
|
||||
return value.Type;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Определение типа поля.
|
||||
/// </summary>
|
||||
/// <param name="node">Поле схемы данных, для которого создаётся тип.</param>
|
||||
/// <param name="value">Добавляемое значение.</param>
|
||||
/// <returns>Новый тип для схемы данных</returns>
|
||||
/// <exception cref="ArgumentNullException">
|
||||
/// Возникает, если у `value` значение идентично `null`
|
||||
/// (такие значения должны обрабаотываться в `SchemaNode`).
|
||||
/// </exception>
|
||||
public virtual AbstractSchemaType Resolve(SchemaNode node, JToken? value)
|
||||
{
|
||||
var type = TokenType(value);
|
||||
|
||||
if (type == JTokenType.Null)
|
||||
{
|
||||
throw new Exception("Value is null, cannot determine type");
|
||||
throw new ArgumentNullException();
|
||||
}
|
||||
|
||||
return type switch
|
||||
|
||||
@@ -1,37 +1,56 @@
|
||||
using System.ComponentModel.Design.Serialization;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// Абстрактный тип представоления данных в схеме.
|
||||
/// </summary>
|
||||
/// <param name="parent">Элемент, к которому добавляется тип.</param>
|
||||
internal abstract class AbstractSchemaType(SchemaNode parent)
|
||||
{
|
||||
/// <summary>
|
||||
/// Элемент схемы данных, к которому относится тип.
|
||||
/// </summary>
|
||||
public SchemaNode Parent = parent;
|
||||
|
||||
/// <summary>
|
||||
/// Корневой элемент схемы данных.
|
||||
/// </summary>
|
||||
public SchemaNode Root => Parent.RootNode;
|
||||
|
||||
/// <summary>
|
||||
/// Объект для определения типа поля в схеме данных.
|
||||
/// </summary>
|
||||
public TypeResolver Resolver => Root.Resolver;
|
||||
|
||||
/// <summary>
|
||||
/// Check if type is compatible with current type.
|
||||
/// Проверка, что значение совместимо с текущим типом.
|
||||
/// </summary>
|
||||
/// <param name="value">Value to be checked</param>
|
||||
/// <returns>True if value is compatible with current type</returns>
|
||||
/// <param name="value">Проверяемое значение.</param>
|
||||
/// <returns>`true`, если значение совместимо с текущим типом.</returns>
|
||||
public abstract bool IsCompatibleValue(JToken value);
|
||||
|
||||
/// <summary>
|
||||
/// Add new possible value.
|
||||
/// Добавление нового значения.
|
||||
/// </summary>
|
||||
/// <param name="value">New value</param>
|
||||
/// <param name="value">Новое значение.</param>
|
||||
public abstract void AddValue(JToken value);
|
||||
|
||||
/// <summary>
|
||||
/// Подготовка типа к красивому представлению.
|
||||
/// </summary>
|
||||
public abstract void Beautify();
|
||||
|
||||
/// <summary>
|
||||
/// String representation of type.
|
||||
/// Получение строкового представоения типа элемента.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <returns>Строковое представоение типа элемента</returns>
|
||||
public abstract string GetTypeName();
|
||||
|
||||
/// <summary>
|
||||
/// Полное строковое представление элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представление элемента.</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{GetTypeName()} {Parent.Path}";
|
||||
@@ -39,20 +58,20 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Tabulation characters.
|
||||
/// Отступ для строкового представления.
|
||||
/// </summary>
|
||||
public const string Tab = " ";
|
||||
|
||||
/// <summary>
|
||||
/// Limit of elements in list or dictionary to be displayed.
|
||||
/// Предел количество отображаемых элементов.
|
||||
/// </summary>
|
||||
public const int ElementLimit = 20;
|
||||
public const int ElementLimit = 10;
|
||||
|
||||
/// <summary>
|
||||
/// Indent text.
|
||||
/// Увеличение отступа строки.
|
||||
/// </summary>
|
||||
/// <param name="text">Text to be indented</param>
|
||||
/// <returns>Indented text</returns>
|
||||
/// <param name="text">Изменяемая строка.</param>
|
||||
/// <returns>Строка с добавленными отступами.</returns>
|
||||
public static string Indent(string text)
|
||||
{
|
||||
return text.Replace("\n", "\n" + Tab);
|
||||
|
||||
@@ -1,28 +1,42 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Transactions;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// Тип представоления массива в схеме.
|
||||
/// </summary>
|
||||
/// <param name="parent">Элемент, к которому добавляется тип.</param>
|
||||
internal class ArraySchemaType(SchemaNode parent) : AbstractSchemaType(parent)
|
||||
{
|
||||
/// <summary>
|
||||
/// Минимальное количество элементов в массиве.
|
||||
/// </summary>
|
||||
public int MinCount = int.MaxValue;
|
||||
|
||||
/// <summary>
|
||||
/// Максимальное количество элементов в массиве.
|
||||
/// </summary>
|
||||
public int MaxCount = int.MinValue;
|
||||
|
||||
/// <summary>
|
||||
/// Схема элемента массива.
|
||||
/// </summary>
|
||||
protected SchemaNode ElementSchema = new(parent, "[]");
|
||||
|
||||
protected List<JToken?> Values = [];
|
||||
|
||||
/// <summary>
|
||||
/// Проверка, что значение совместимо с текущим типом.
|
||||
/// </summary>
|
||||
/// <param name="value">Проверяемое значение.</param>
|
||||
/// <returns>`true`, если значение совместимо с текущим типом.</returns>
|
||||
public override bool IsCompatibleValue(JToken value)
|
||||
{
|
||||
return Resolver.TokenType(value) == JTokenType.Array;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление нового значения.
|
||||
/// </summary>
|
||||
/// <param name="value">Новое значение.</param>
|
||||
public override void AddValue(JToken value)
|
||||
{
|
||||
if (value.Type != JTokenType.Array)
|
||||
@@ -41,16 +55,27 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подготовка типа к красивому представлению.
|
||||
/// </summary>
|
||||
public override void Beautify()
|
||||
{
|
||||
|
||||
ElementSchema.Beautify();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение строкового представоения типа элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представоение типа элемента</returns>
|
||||
public override string GetTypeName()
|
||||
{
|
||||
return $"array<{ElementSchema.GetTypeName()}>";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Полное строковое представление элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представление элемента.</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Join("\n" + Tab, [
|
||||
|
||||
@@ -1,23 +1,37 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// Тип представоления словаря в схеме.
|
||||
/// </summary>
|
||||
/// <param name="parent">Элемент, к которому добавляется тип.</param>
|
||||
internal class DictionarySchemaType(SchemaNode parent) : AbstractSchemaType(parent)
|
||||
{
|
||||
/// <summary>
|
||||
/// Схема ключей словаря.
|
||||
/// </summary>
|
||||
public SchemaNode KeyNode = new(parent, "[key]");
|
||||
|
||||
/// <summary>
|
||||
/// Схема значений словаря.
|
||||
/// </summary>
|
||||
public SchemaNode ItemNode = new(parent, "[value]");
|
||||
|
||||
/// <summary>
|
||||
/// Проверка, что значение совместимо с текущим типом.
|
||||
/// </summary>
|
||||
/// <param name="value">Проверяемое значение.</param>
|
||||
/// <returns>`true`, если значение совместимо с текущим типом.</returns>
|
||||
public override bool IsCompatibleValue(JToken value)
|
||||
{
|
||||
return Resolver.TokenType(value) == JTokenType.Object;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление нового значения.
|
||||
/// </summary>
|
||||
/// <param name="value">Новое значение.</param>
|
||||
public override void AddValue(JToken value)
|
||||
{
|
||||
var obj = (JObject)value;
|
||||
@@ -29,16 +43,28 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подготовка типа к красивому представлению.
|
||||
/// </summary>
|
||||
public override void Beautify()
|
||||
{
|
||||
|
||||
KeyNode.Beautify();
|
||||
ItemNode.Beautify();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение строкового представоения типа элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представоение типа элемента</returns>
|
||||
public override string GetTypeName()
|
||||
{
|
||||
return $"dict<{KeyNode.GetTypeName()}, {ItemNode.GetTypeName()}>";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Полное строковое представление элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представление элемента.</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Join("\n" + Tab, [
|
||||
|
||||
@@ -1,24 +1,42 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// Тип, указывающий, что данные игнорируются.
|
||||
/// </summary>
|
||||
/// <param name="parent">Элемент, к которому добавляется тип.</param>
|
||||
internal class IgnoreSchemaType(SchemaNode parent) : AbstractSchemaType(parent)
|
||||
{
|
||||
/// <summary>
|
||||
/// Проверка, что значение совместимо с текущим типом.
|
||||
/// </summary>
|
||||
/// <param name="value">Проверяемое значение.</param>
|
||||
/// <returns>`true`, если значение совместимо с текущим типом.</returns>
|
||||
public override bool IsCompatibleValue(JToken value)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление нового значения.
|
||||
/// </summary>
|
||||
/// <param name="value">Новое значение.</param>
|
||||
public override void AddValue(JToken value)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подготовка типа к красивому представлению.
|
||||
/// </summary>
|
||||
public override void Beautify()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение строкового представоения типа элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представоение типа элемента</returns>
|
||||
public override string GetTypeName()
|
||||
{
|
||||
return "ignore";
|
||||
|
||||
@@ -1,21 +1,32 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// Тип представоления объектов в схеме.
|
||||
/// </summary>
|
||||
/// <param name="parent">Элемент, к которому добавляется тип.</param>
|
||||
internal class ObjectSchemaType(SchemaNode parent) : AbstractSchemaType(parent)
|
||||
{
|
||||
/// <summary>
|
||||
/// Элемнты полей объекта.
|
||||
/// </summary>
|
||||
public List<SchemaNode> Fields = [];
|
||||
|
||||
/// <summary>
|
||||
/// Проверка, что значение совместимо с текущим типом.
|
||||
/// </summary>
|
||||
/// <param name="value">Проверяемое значение.</param>
|
||||
/// <returns>`true`, если значение совместимо с текущим типом.</returns>
|
||||
public override bool IsCompatibleValue(JToken value)
|
||||
{
|
||||
return Resolver.TokenType(value) == JTokenType.Object;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление нового значения.
|
||||
/// </summary>
|
||||
/// <param name="value">Новое значение.</param>
|
||||
public override void AddValue(JToken value)
|
||||
{
|
||||
var obj = (JObject)value;
|
||||
@@ -42,6 +53,9 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подготовка типа к красивому представлению.
|
||||
/// </summary>
|
||||
public override void Beautify()
|
||||
{
|
||||
Fields.Sort((a, b) =>
|
||||
@@ -51,7 +65,7 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
return 1;
|
||||
}
|
||||
|
||||
return a.Name.CompareTo(b.Name);
|
||||
return string.Compare(a.Name, b.Name, StringComparison.Ordinal);
|
||||
});
|
||||
|
||||
foreach (var field in Fields)
|
||||
@@ -60,11 +74,19 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение строкового представоения типа элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представоение типа элемента</returns>
|
||||
public override string GetTypeName()
|
||||
{
|
||||
return "object";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Полное строковое представление элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представление элемента.</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
List<string> rows = [base.ToString()];
|
||||
|
||||
@@ -2,17 +2,37 @@
|
||||
|
||||
namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// Тип представоления простых значений в схеме.
|
||||
/// </summary>
|
||||
/// <param name="parent">Элемент, к которому добавляется тип.</param>
|
||||
/// <param name="type">Тип значения.</param>
|
||||
internal class StaticSchemaType(SchemaNode parent, JTokenType type) : AbstractSchemaType(parent)
|
||||
{
|
||||
/// <summary>
|
||||
/// Тип значения.
|
||||
/// </summary>
|
||||
protected JTokenType Type = type;
|
||||
|
||||
/// <summary>
|
||||
/// Набор возможных значений и их количества.
|
||||
/// </summary>
|
||||
protected Dictionary<JToken, int> Values = [];
|
||||
|
||||
/// <summary>
|
||||
/// Проверка, что значение совместимо с текущим типом.
|
||||
/// </summary>
|
||||
/// <param name="value">Проверяемое значение.</param>
|
||||
/// <returns>`true`, если значение совместимо с текущим типом.</returns>
|
||||
public override bool IsCompatibleValue(JToken value)
|
||||
{
|
||||
return value.Type == Type;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление нового значения.
|
||||
/// </summary>
|
||||
/// <param name="value">Новое значение.</param>
|
||||
public override void AddValue(JToken value)
|
||||
{
|
||||
Values.TryAdd(value, 0);
|
||||
@@ -20,6 +40,9 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
Values[value]++;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подготовка типа к красивому представлению.
|
||||
/// </summary>
|
||||
public override void Beautify()
|
||||
{
|
||||
if (Type == JTokenType.String)
|
||||
@@ -39,11 +62,19 @@ namespace Pf2eDataScrapper.SchemaBuilder.Types
|
||||
Values = Values.OrderByDescending(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение строкового представоения типа элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представоение типа элемента</returns>
|
||||
public override string GetTypeName()
|
||||
{
|
||||
return Type.ToString().ToLower();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Полное строковое представление элемента.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представление элемента.</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
var result = base.ToString();
|
||||
|
||||
Reference in New Issue
Block a user