Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
1ada0c8
Добавлена команда ScreenShotCommand для захвата экрана
Infarh Jan 21, 2026
0124683
Добавлены скрипты публикации NuGet и очистки проекта
Infarh Jan 21, 2026
6b8e4a3
Добавлен класс команды CloseApp для завершения приложения
Infarh Feb 2, 2026
f6ece76
Добавлен класс TerminateApp для принудительного выхода
Infarh Feb 2, 2026
40f2b1a
Сделан параметр Parameter необязательным в TryExecute
Infarh Feb 3, 2026
291e271
Мелкий рефакторинг
Infarh Feb 13, 2026
6a9b52b
Унификация логики построения дуг и секторов Arc/Pie
Infarh Feb 13, 2026
3efb6f5
Добавлен подробный README.md для MathCore.WPF.Shapes
Infarh Feb 13, 2026
de9120f
Добавлен подробный README.md для MathCore.WPF.Shaders
Infarh Feb 13, 2026
d23fea2
Добавлены подробные комментарии и README для шейдеров
Infarh Feb 13, 2026
1f4b63b
В класс ViewModel добавлены XML-комментарии.
Infarh Feb 13, 2026
5016fdd
Рефакторинг: вынесены методы Set/SetValue в отдельные файлы
Infarh Feb 13, 2026
f358ff3
Улучшена документация методов ViewModel
Infarh Feb 13, 2026
4bb4b03
Добавлена документация и XML-комментарии к ValidationRules
Infarh Feb 13, 2026
3a83dab
Рефакторинг, комментарии
Infarh Feb 13, 2026
9065692
Расширение и рефакторинг FileDialogEx для WPF
Infarh Feb 13, 2026
026d93f
Комментарии
Infarh Feb 13, 2026
f867afc
Улучшена инициализация и обработка GIF-анимации
Infarh Feb 13, 2026
79c7e42
Комментарии
Infarh Feb 13, 2026
dcb21d0
Расширения для диалогов и TextBox, новый NotifyPropertyChangedEx
Infarh Feb 13, 2026
e6d5c91
Обновление NuGet-пакетов в проектах WPF
Infarh Feb 13, 2026
33ea4cc
Обновление MathCore до версии 0.1.0
Infarh Feb 14, 2026
53e778e
Удалена поддержка net4.7-windows из проекта
Infarh Feb 14, 2026
ebe95a0
Комментарии, рефакторинг
Infarh Feb 14, 2026
eb3a8d9
refactor(svg): comprehensive SVG rendering engine revision with Russi…
Infarh Feb 14, 2026
030a3cd
docs: добавлена полная документация и ревизия TeX модуля
Infarh Feb 14, 2026
4791278
Добавлен prompt для ревизии и документации модулей
Infarh Feb 15, 2026
6281778
Улучшено управление жизненным циклом хоткеев, README
Infarh Feb 15, 2026
174943f
Улучшена документация класса Mapper и его методов
Infarh Feb 15, 2026
17b54b2
Эксперименты со стилями и динамическими ресурсами как параметрами стиля
Infarh Feb 15, 2026
e280448
Добавлен MapperConverter (Freezable) и MarkupExtension MapperF
Infarh Feb 15, 2026
946e1e6
Эксперименты
Infarh Feb 15, 2026
868e89a
v0.0.50 - Обновление NetCore
Infarh Feb 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
- Каждый тег XML‑комментария располагай на отдельной строке
- Порядок тегов: `<summary>` → `<param>` → `<returns>` → `<exception>` → `<remarks>` → `<example>`
- Для сложных публичных метдов генерируй блок с простым примером использования кода внутри тега `<example>`
- Примеры использования кода внутри тега `<example>` должны быть лаконичными и демонстрировать только ключевые моменты использования метода, без избыточных деталей
- Примеры кода нужно заворачивать в тег `<code>` внутри тега `<example>`, чтобы обеспечить правильное форматирование и подсветку синтаксиса, а также размещать в элементе `<![CDATA[ ]]>` что бы не использовать экранирование xml-символов

Примеры:
- `<summary>Краткое описание сущности</summary>`
Expand Down
21 changes: 21 additions & 0 deletions .github/explain-code.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
agent: 'agent'
description: 'Generate a clear code explanation with examples'
---

Explain the following code in a clear, beginner-friendly way:

Code to explain: ${input:code:Paste your code here}
Target audience: ${input:audience:Who is this explanation for? (e.g., beginners, intermediate developers, etc.)}

Please provide:

* A brief overview of what the code does
* A step-by-step breakdown of the main parts
* Explanation of any key concepts or terminology
* A simple example showing how it works
* Common use cases or when you might use this approach

Use clear, simple language and avoid unnecessary jargon.

Отвечай используя русский язык.
76 changes: 76 additions & 0 deletions .github/prompts/auditAndDocumentModule.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
name: auditAndDocumentModule
---

Проведите комплексную ревизию и документирование указанного модуля или пространства имён. Выполните следующие задачи:

## 1. Создание архитектурной документации

Напишите полный README.md файл, включающий:
- **Основные возможности** - список ключевых функций модуля
- **Архитектура** - описание всех основных компонентов с диаграммами/схемами
- **Основной цикл обработки** - блок-схема или текстовое описание потока данных
- **Примеры использования** - базовые и продвинутые примеры с кодом
- **Поддерживаемая функциональность** - список команд, методов, свойств
- **Конфигурация** - описание файлов и параметров конфигурации
- **Точки расширения** - как добавлять новые функции
- **Производительность** - рекомендации по оптимизации
- **Обработка ошибок** - описание исключений и их причин

## 2. Добавление XML-документации

Для всех публичных типов и методов добавьте:
- `<summary>` - краткое описание (одна строка)
- `<remarks>` - подробное объяснение (многострочное)
- `<param>` - описание параметров с типами
- `<returns>` - описание возвращаемого значения
- `<exception>` - выбрасываемые исключения
- `<example>` - практические примеры использования в блоке `<![CDATA[]]>`

## 3. Локализация комментариев

Переведите все комментарии в коде на целевой язык (указать в инструкции):
- Встроенные однострочные комментарии
- Многострочные блочные комментарии
- Сохраняйте техническую терминологию в том же языке (CamelCase имена, аббревиатуры)

## 4. Ревизия качества кода

Проанализируйте код на:
- Ошибки компиляции и синтаксические проблемы
- Потенциальные ошибки в реализации
- Нарушения принципов SOLID
- Проблемы с обработкой исключений
- Неиспользуемый код
- Архитектурные проблемы

## 5. Управление версионированием (Git)

Выполните следующий рабочий процесс:
- Создайте feature-ветку (например, `feature/module-review-and-docs`)
- Добавьте и закоммитьте все изменения с описательными сообщениями
- Переключитесь на целевую ветку (обычно `dev`)
- Выполните merge feature-ветки в целевую ветку
- Удалите временную feature-ветку
- Проверьте успешную интеграцию

## 6. Итоговый отчёт

Создайте отчёт, включающий:
- Список всех модифицированных файлов
- Количество добавленных и удаленных строк
- Краткое описание каждого изменения
- Выявленные проблемы (если есть)
- Рекомендации по дальнейшему улучшению
- Git информацию (ветка, commit ID, статистика merge)

## Контрольный список

- [ ] Проект успешно компилируется
- [ ] README.md создан и содержит полную документацию
- [ ] XML-комментарии добавлены ко всем публичным членам
- [ ] Все комментарии переведены на целевой язык
- [ ] Примеры кода заключены в блоки CDATA
- [ ] Проведена ревизия качества кода
- [ ] Git операции выполнены успешно
- [ ] Итоговый отчёт составлен
41 changes: 41 additions & 0 deletions .github/prompts/documentPublicApi.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
name: documentPublicApi
---
# Документирование публичного API

Проверь и дополни файл полной XML-документацией для типа (класса, интерфейса, структуры) и всех его публичных членов.

## Документирование класса/типа

Добавь комментарий к самому классу/типу с:
- `<summary>` — краткое описание назначения и функциональности
- `<remarks>` — дополнительная информация о возможностях и ограничениях (опционально)
- `<example>` — практический пример, демонстрирующий основные сценарии использования класса

## Документирование публичных членов

Убедись, что все публичные члены задокументированы — методы, свойства, события, события должны иметь полный набор тегов:
- `<summary>` — краткое описание (одна строка, без точки в конце)
- `<param>` — для параметров методов (если они есть)
- `<returns>` — для возвращаемого значения
- `<value>` — для свойств, описывающее значение
- `<exception>` — для исключений, которые может выбросить метод
- `<remarks>` — дополнительная информация (опционально)
- `<example>` — примеры использования для сложных публичных методов

## Требования к комментариям

1. **Язык:** все комментарии на русском языке — переведи существующие английские комментарии
2. **Примеры использования:**
- Добавь блок `<example>` с практическим примером кода
- Обёрнь код в `<code language="csharp"><![CDATA[ ... ]]></code>`
- Для класса: покажи типичные сценарии использования его основной функциональности
- Для методов: продемонстрируй типичный вызов и результат
3. **Структура:**
- Порядок тегов: `<summary>` → `<param>` → `<returns>` → `<value>` → `<exception>` → `<remarks>` → `<example>`
- Каждый тег на отдельной строке
- Одинарное предложение в одной строке без точки в конце внутри тега

## Минимизация изменений

Изменяй только документацию — не переписывай существующий код, не добавляй новые члены класса, не рефакторь реализацию.
81 changes: 81 additions & 0 deletions .scripts/nuget-ver-remote.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#!/usr/local/bin/dotnet run
// Файл file-based app скрипта для определения текущей версии NuGet пакета из удаленного репозитория.
// Использование: dotnet run .scripts/nuget-ver-remote.cs <package-name>

#nullable enable

#:package NuGet.Protocol@7.0.1
#:package NuGet.Configuration@7.0.1

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using NuGet.Common;
using NuGet.Configuration;
using NuGet.Protocol;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;

if (args.Length < 1)
{
Console.Error.WriteLine("Usage: dotnet run .scripts/nuget-ver-remote.cs <package-name>");
Environment.Exit(1);
}

var package_name = args[0]; // имя пакета из аргумента
if (string.IsNullOrWhiteSpace(package_name))
{
Console.Error.WriteLine("Package name is empty");
Environment.Exit(1);
}

try
{
// Создадим репозиторий NuGet (v3 API)
var source_repo = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");

// Получим ресурс метаданных пакета
using var cache = new SourceCacheContext();
var logger = NullLogger.Instance;
var resource = await source_repo.GetResourceAsync<PackageMetadataResource>().ConfigureAwait(false);

// Запросим все метаданные по пакету (включая pre-release), не включая unlisted
var metadata = await resource.GetMetadataAsync(package_name, includePrerelease: true, includeUnlisted: false, cache, logger, CancellationToken.None).ConfigureAwait(false);

var metadata_list = metadata?.ToList() ?? new System.Collections.Generic.List<IPackageSearchMetadata>();
if (metadata_list.Count == 0)
{
Console.Error.WriteLine($"Package not found: {package_name}");
Environment.Exit(2);
}

// Соберём версии и выберем последнюю стабильную, если есть, иначе последнюю доступную
var versions = metadata_list
.Select(m => m.Identity.Version)
.Where(v => v is not null)
.OrderBy(v => v)
.ToArray();

if (versions.Length == 0)
{
Console.Error.WriteLine("No versions found");
Environment.Exit(2);
}

var stable_version = versions
.Where(v => !v.IsPrerelease)
.OrderByDescending(v => v)
.FirstOrDefault()
?? versions.OrderByDescending(v => v).First();

var latest_version = stable_version.ToNormalizedString();

Console.WriteLine(latest_version); // вывод версии в stdout
Environment.Exit(0);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error: {ex.Message}");
Environment.Exit(2);
}
116 changes: 116 additions & 0 deletions .scripts/nuget-ver-wait.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
#!/usr/local/bin/dotnet run
// Файл file-based app скрипта для ожидания появления указанной версии NuGet пакета на сервере.
// Использование: dotnet run .scripts/nuget-ver-wait.cs <package-name> <target-version> [-n <tries>] [-t <timeout-ms>]

#nullable enable

#:package NuGet.Protocol@7.0.1
#:package NuGet.Configuration@7.0.1

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using NuGet.Common;
using NuGet.Configuration;
using NuGet.Protocol;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;

if (args.Length < 2)
{
Console.Error.WriteLine("Usage: dotnet run .scripts/nuget-ver-wait.cs <package-name> <target-version> [-n <tries>] [-t <timeout-ms>]");
Environment.Exit(1);
}

var package_name = args[0]; // имя пакета
var target_version_str = args[1]; // требуемая версия
if (string.IsNullOrWhiteSpace(package_name) || string.IsNullOrWhiteSpace(target_version_str))
{
Console.Error.WriteLine("Package name or target version is empty");
Environment.Exit(1);
}

// Значения по умолчанию
var tries = 10; // -n по умолчанию
var timeout_ms = 1000; // -t по умолчанию

// Разбор дополнительных аргументов
for (var i = 2; i < args.Length; i++)
{
var a = args[i];
const StringComparison cmp = StringComparison.OrdinalIgnoreCase;
if (string.Equals(a, "-n", cmp) && i + 1 < args.Length)
{
if (int.TryParse(args[++i], out var v)) tries = v;
}
else if (string.Equals(a, "-t", cmp) && i + 1 < args.Length)
{
if (int.TryParse(args[++i], out var v)) timeout_ms = v;
}
}

if (tries <= 0) tries = 1;
if (timeout_ms < 0) timeout_ms = 0;

if (!NuGetVersion.TryParse(target_version_str, out var target_version))
{
Console.Error.WriteLine($"Невозможно распарсить целевую версию: {target_version_str}");
Environment.Exit(1);
}

Console.WriteLine($"Ожидание версии {target_version} пакета {package_name} на nuget.org ({tries} попыток, таймаут {timeout_ms}ms)");

try
{
var source_repo = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
using var cache = new SourceCacheContext();
var logger = NullLogger.Instance;
var resource = await source_repo.GetResourceAsync<PackageMetadataResource>();

for (var attempt = 1; attempt <= tries; attempt++)
{
// Получим метаданные пакета
var metadata = await resource.GetMetadataAsync(package_name, includePrerelease: true, includeUnlisted: false, cache, logger, CancellationToken.None);
var metadata_list = metadata?.ToList() ?? [];

if (metadata_list.Count == 0)
Console.WriteLine($"[{attempt}/{tries}] Пакет не найден на сервере");
else
{
var versions = metadata_list
.Select(m => m.Identity.Version)
.Where(v => v is not null)
.OrderByDescending(v => v)
.ToArray();

if (versions.Length == 0)
Console.WriteLine($"[{attempt}/{tries}] На сервере нет версий пакета");
else
{
var latest = versions[0];
Console.WriteLine($"[{attempt}/{tries}] Серверная последняя версия: {latest}");

// Сравним последнюю серверную версию с целевой
if (latest < target_version)
Console.WriteLine($"Серверная версия {latest} младше требуемой {target_version}, ожидаем...");
else
{
Console.WriteLine($"Требуемая версия {target_version} доступна на сервере (серверная версия {latest})");
Environment.Exit(0);
}
}
}

if (attempt < tries)
await Task.Delay(timeout_ms);
}

Console.Error.WriteLine($"Не удалось дождаться версии {target_version} для пакета {package_name} после {tries} попыток");
Environment.Exit(2);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Ошибка: {ex.Message}");
Environment.Exit(2);
}
26 changes: 26 additions & 0 deletions .scripts/xml-xpath.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/local/bin/dotnet run
// Файл file-based app скрипта для выполнения XPath запросов к XML файлам.
// запуск через команду: dotnet run .scripts/xml-xpath.cs <xml-file> <xpath-query>

using System;
using System.Xml;

if (args.Length != 2)
{
Console.WriteLine("Usage: dotnet run .scripts/xml-xpath.cs <xml-file> <xpath-query>");
return;
}

var xml_file = args[0];
var xpath_query = args[1];

XmlDocument xml_doc = new XmlDocument();
xml_doc.Load(xml_file);

var nodes = xml_doc.SelectNodes(xpath_query);
if (nodes is null || nodes.Count == 0)
Console.WriteLine("No nodes found."); // нет найденных узлов
else
// используем явный тип XmlNode чтобы не получать object и иметь доступ к OuterXml
foreach (XmlNode node in nodes)
Console.WriteLine(node.OuterXml);
1 change: 1 addition & 0 deletions MathCore.WPF.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
</Folder>
<Folder Name="/.Service/.github/">
<File Path=".github/copilot-instructions.md" />
<File Path=".github/explain-code.prompt.md" />
</Folder>
<Folder Name="/.Service/.github/workflows/">
<File Path=".github/workflows/publish.yml" />
Expand Down
Loading
Loading