using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers;
///
/// Класс-помощник, для обработки строкового ввода с Архивов Нефиса.
/// Реализует шаблон Singleton.
///
public partial class StringHelper
{
///
/// Конструктор класса
///
public StringHelper() { }
///
/// Разбиение строки по нестабильным строковым разделителям (например, ", ", " or " и т.д.).
///
/// Исходная строка.
/// Коллекция строк.
public List RowSplit(string value)
{
return value
.Replace(", or", ",")
.Replace(" or ", ", ")
.Replace(";", ",")
.Split(", ")
.Where(s => !string.IsNullOrWhiteSpace(s))
.ToList();
}
///
/// Разбор списка ссылок в исходной строке.
///
/// Исходная строка.
/// Структура, содеражащая информацию разбиении строки по ссылкам.
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;
}
///
/// Извлечение суффикса из описания источника.
///
/// Исходная строка.
/// Суффикс.
public string ResolveSourceSuffix(string input)
{
Match match = SourceSuffixRegex().Match(input);
return match.Captures.Count > 0 ? match.Groups[1].Value : "";
}
///
/// Регулярное выражение для извлечения источника из строки с Markdown-ссылкой.
///
/// Регулярное выражение.
[GeneratedRegex(@"^\[.*?\]\(.*?\)\s+(.*)$")]
public static partial Regex SourceSuffixRegex();
///
/// Регулярное выражение для выявления Markdown-ссылок в строке.
///
/// Регулярное выражение.
[GeneratedRegex(@"(.*?)\[(.*?)\]\((.*?)\)")]
public static partial Regex LinkRegex();
}
///
/// Класс структуры, содеражащая информацию разбиении строки по ссылкам.
///
public class MarkdownLinkSplit
{
///
/// Список содержащихся ссылок.
///
public List Links { get; } = [];
///
/// Завершающая часть ссылки.
///
public string Suffix { get; set; } = "";
}
///
/// Информация о ссылке в строке.
///
public class MarkdownLink
{
///
/// Данные, содержащиеся до ссылки.
///
public string Prefix { get; init; } = "";
///
/// Текст ссылки.
///
public string Text { get; init; } = "";
///
/// URL ссылки.
///
public string Url { get; init; } = "";
}