/
yeremee
/
FormatConsole
Обзор
Документация
Войти
/
yeremee
/
FormatConsole
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
_old/FormatRules.cs
81 строка
4 KB
Yεrεmεe
Репозиторий создан
01 мар 2026, 21:28
01 мар 2026, 21:28
706ce25
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Linq; using System.Diagnostics; using ConsoleTools.Properties; namespace ConsoleTools.Formatting._old { /// <summary> /// Представляет коллекцию правил форматирования, задаваемых 5-местными кортежами. /// </summary> public class FormatRules : List<( string InitialSymbol, // инициаль (начальный символ) string FinalSymbol, // финаль (конечный символ) ConsoleColor? TextColor, // цвет текста ConsoleColor? BackgroundColor, // цвет фона bool ToUpperCase // в верхнем регистре )> { /* // символ ←→ (код служебной метки) ←→ формат internal List<(int *//* код метки *//*, string *//* символ *//*, bool *//* парный? *//*)> соответствияМетокСимволам; internal Dictionary<int *//* код метки *//*, (ConsoleColor?, ConsoleColor?, bool) *//* формат *//*> соответствияМетокФорматам; */ internal new (ConsoleColor?, ConsoleColor?, bool) this[int кодМетки] => СоответствияМеткам .Where(кортеж => кортеж.Item1 == кодМетки) .Select(кортеж => (кортеж.Item4, кортеж.Item5, кортеж.Item6)) .First(); internal IEnumerable<(int /* код метки */, /* правило */ string, string, ConsoleColor?, ConsoleColor?, bool)> СоответствияМеткам { get { const int минимальныйКодМетки = 0xE0020; const int максимальныйКодМетки = 0xE007E; // Выстраивание последовательности замен в нужном порядке var правила = this.OrderByDescending(соответствие => соответствие.InitialSymbol.Length); // по длине инициали //.Distinct() //.ToList(); // Перебор всех содержащихся правил int кодМетки = минимальныйКодМетки; foreach (var (инициаль, финаль, цветТекста, цветФона, вВерхнемРегистре) in правила) { if (инициаль.Length != финаль.Length) throw new FormatConsoleException(Resources.СимволыРазличныПоДлине); if (кодМетки > максимальныйКодМетки) throw new FormatConsoleException(Resources.СлишкомМногоПравил .Rplc("rules", максимальныйКодМетки - минимальныйКодМетки + 1, true)); yield return (кодМетки, инициаль, финаль, цветТекста, цветФона, вВерхнемРегистре); кодМетки++; } //> исклюючение, если правило задано более одного раза } } //private Random рандомизатор = new(); //private string КодМетки //{ // get => new(Enumerable.Repeat("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 5) // .Select(s => s[рандомизатор.Next(s.Length)]) // .ToArray()); //} //> форматирующая разметка не может состоять из одних букв-цифр } }