Глобальный рефакторинг пространств имён
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers;
|
||||
|
||||
/// <summary>
|
||||
/// Класс-помощник, для обработки строкового ввода с Архивов Нефиса.
|
||||
/// Реализует шаблон <c>Singleton</c>.
|
||||
/// </summary>
|
||||
internal partial class StringHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Конструктор класса <see cref="StringHelper"/>
|
||||
/// </summary>
|
||||
public StringHelper() { }
|
||||
|
||||
/// <summary>
|
||||
/// Разбиение строки по нестабильным строковым разделителям (например, <c>", "</c>, <c>" or "</c> и т.д.).
|
||||
/// </summary>
|
||||
/// <param name="value">Исходная строка.</param>
|
||||
/// <returns>Коллекция строк.</returns>
|
||||
public List<string> RowSplit(string value)
|
||||
{
|
||||
return value
|
||||
.Replace(", or", ",")
|
||||
.Replace(" or ", ", ")
|
||||
.Replace(";", ",")
|
||||
.Split(", ")
|
||||
.Where(s => !string.IsNullOrWhiteSpace(s))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Разбор списка ссылок в исходной строке.
|
||||
/// </summary>
|
||||
/// <param name="input">Исходная строка.</param>
|
||||
/// <returns>Структура, содеражащая информацию разбиении строки по ссылкам.</returns>
|
||||
public MarkdownLinkSplit ParseMarkdownLinks(string input)
|
||||
{
|
||||
MarkdownLinkSplit result = new();
|
||||
|
||||
MatchCollection matches = LinkRegex().Matches(input);
|
||||
|
||||
foreach (Match match in matches)
|
||||
{
|
||||
result.Links.Add(
|
||||
new()
|
||||
{
|
||||
Prefix = match.Groups[1].Value.Trim(),
|
||||
Text = match.Groups[2].Value.Trim(),
|
||||
Url = match.Groups[3].Value.Trim(),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
result.Suffix = LinkRegex().Replace(input, "");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Извлечение суффикса из описания источника.
|
||||
/// </summary>
|
||||
/// <param name="input">Исходная строка.</param>
|
||||
/// <returns>Суффикс.</returns>
|
||||
public string ResolveSourceSuffix(string input)
|
||||
{
|
||||
Match match = SourceSuffixRegex().Match(input);
|
||||
return match.Captures.Count > 0 ? match.Groups[1].Value : "";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Регулярное выражение для извлечения источника из строки с Markdown-ссылкой.
|
||||
/// </summary>
|
||||
/// <returns>Регулярное выражение.</returns>
|
||||
[GeneratedRegex(@"^\[.*?\]\(.*?\)\s+(.*)$")]
|
||||
public static partial Regex SourceSuffixRegex();
|
||||
|
||||
/// <summary>
|
||||
/// Регулярное выражение для выявления Markdown-ссылок в строке.
|
||||
/// </summary>
|
||||
/// <returns>Регулярное выражение.</returns>
|
||||
[GeneratedRegex(@"(.*?)\[(.*?)\]\((.*?)\)")]
|
||||
public static partial Regex LinkRegex();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Класс структуры, содеражащая информацию разбиении строки по ссылкам.
|
||||
/// </summary>
|
||||
internal class MarkdownLinkSplit
|
||||
{
|
||||
/// <summary>
|
||||
/// Список содержащихся ссылок.
|
||||
/// </summary>
|
||||
public List<MarkdownLink> Links { get; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Завершающая часть ссылки.
|
||||
/// </summary>
|
||||
public string Suffix { get; set; } = "";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Информация о ссылке в строке.
|
||||
/// </summary>
|
||||
internal class MarkdownLink
|
||||
{
|
||||
/// <summary>
|
||||
/// Данные, содержащиеся до ссылки.
|
||||
/// </summary>
|
||||
public string Prefix { get; init; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Текст ссылки.
|
||||
/// </summary>
|
||||
public string Text { get; init; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// URL ссылки.
|
||||
/// </summary>
|
||||
public string Url { get; init; } = "";
|
||||
}
|
||||
Reference in New Issue
Block a user