Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
d754f69
change gitignore
PhoenixNazarov May 7, 2024
c6d2a42
Add parsing .slx
PhoenixNazarov May 7, 2024
701f294
BugFix slx parser
PhoenixNazarov Jun 21, 2024
a37c583
Make translator
PhoenixNazarov Jul 1, 2024
44adf18
make plugin with openFormDialog
PhoenixNazarov Aug 27, 2024
48d719a
Merge branch 'develop' into main
PhoenixNazarov Aug 27, 2024
70d7c73
Bugfix framework to 4.0
PhoenixNazarov Aug 29, 2024
d559898
Merge remote-tracking branch 'origin/main'
PhoenixNazarov Aug 29, 2024
db33e48
Fix SSID parsing
PhoenixNazarov Aug 29, 2024
5c4321c
Minor changes
PhoenixNazarov Aug 29, 2024
e5a8af9
Add Data translator
PhoenixNazarov Aug 31, 2024
5bfa62c
change build path
PhoenixNazarov Sep 2, 2024
d18b89f
Change framework to 4.5 and move test file
PhoenixNazarov Sep 2, 2024
5710b07
Add some design
PhoenixNazarov Oct 25, 2024
a3b6f0d
Add reactive objects
PhoenixNazarov Nov 8, 2024
c12f6d8
Add Zoom and traslate
PhoenixNazarov Nov 8, 2024
b7bb731
Add move states on map
PhoenixNazarov Nov 9, 2024
52dc940
Add Editors User Controls
PhoenixNazarov Nov 11, 2024
0391de2
Add transitions rendering
PhoenixNazarov Nov 18, 2024
49a7304
Fix TheCanvas
PhoenixNazarov Nov 19, 2024
335598a
Structure for variables and conditions for executor
PhoenixNazarov Nov 24, 2024
9c2d7e6
Add conditions and events logics
PhoenixNazarov Nov 25, 2024
65ad60b
bugfix
PhoenixNazarov Nov 27, 2024
40460bd
Merge branch 'main' into avalonia
PhoenixNazarov Dec 5, 2024
0314a72
* Add save/Load project
PhoenixNazarov Dec 6, 2024
02b8326
Add variables, save/load project, undo/redo, execution
PhoenixNazarov Dec 7, 2024
69d2570
Add documentation, add slx parser plugin, edit states
PhoenixNazarov Dec 14, 2024
21ed44c
Add parsing XY in from slx
PhoenixNazarov Dec 17, 2024
7f52197
bugfix save project
PhoenixNazarov Dec 17, 2024
326bf6e
Merge pull request #1 from PhoenixNazarov/avalonia
PhoenixNazarov Dec 18, 2024
6c95f7e
Move into projects
PhoenixNazarov Mar 23, 2025
e37c2e1
Kotlin testing
PhoenixNazarov Mar 23, 2025
32453a4
Complete kotlin
PhoenixNazarov Mar 23, 2025
603b297
SF-12: Add python tests
PhoenixNazarov Mar 24, 2025
9cd20d8
SF-12: add typescript generation
PhoenixNazarov Mar 25, 2025
d77f2cf
SF-12: add js
PhoenixNazarov Mar 26, 2025
e1d1713
SF-24: add serialize values in generated code
PhoenixNazarov Mar 26, 2025
98aa5ca
SF-22: Python3 support tests and events condition serialize
PhoenixNazarov Mar 30, 2025
2cf4136
Add json serialize
PhoenixNazarov Mar 30, 2025
8718f4a
SF-16: add python3 tests
PhoenixNazarov Mar 30, 2025
4a417ee
Add ci
PhoenixNazarov Mar 30, 2025
2f817aa
add CI
PhoenixNazarov Mar 30, 2025
ce9f597
Add CI
PhoenixNazarov Mar 30, 2025
5e4d87d
Add CI
PhoenixNazarov Mar 30, 2025
c003803
add CI
PhoenixNazarov Mar 30, 2025
ab704ae
SF-26: add cotlin ci
PhoenixNazarov Mar 30, 2025
975746f
SF-26: add cotlin ci
PhoenixNazarov Mar 30, 2025
65df25a
SF-26: add JS ci
PhoenixNazarov Mar 30, 2025
1e192d9
SF-26: fix JS ci
PhoenixNazarov Mar 30, 2025
2b460f0
SF-26: fix JS ci
PhoenixNazarov Mar 30, 2025
1e6638e
SF-26: add ts tests and ci
PhoenixNazarov Mar 30, 2025
fa6e03a
SF-26: add kotlin CI
PhoenixNazarov Mar 30, 2025
bcf3383
SF-26: add kotlin CI
PhoenixNazarov Mar 30, 2025
7714b23
SF-22: add convert condition and events to templates
PhoenixNazarov Mar 31, 2025
f214709
Add java templates
PhoenixNazarov Apr 4, 2025
087d79f
Bugfix
PhoenixNazarov Apr 4, 2025
2e462f8
SF-2: add c#
PhoenixNazarov Apr 5, 2025
dda9cf7
Update scharp
PhoenixNazarov Apr 5, 2025
c875818
SF-12: add c++ generation
PhoenixNazarov Apr 7, 2025
ef9eba4
SF-12: add c++ generation
PhoenixNazarov Apr 7, 2025
a317a00
SF-12: add c++ generation
PhoenixNazarov Apr 7, 2025
f70a19a
SF-12: add c++ generation
PhoenixNazarov Apr 7, 2025
c40fc41
SF-12: add generated tests
PhoenixNazarov Apr 7, 2025
d752ce4
SF-20: add project tests workflow
PhoenixNazarov Apr 8, 2025
1c4820f
Add interface for generate and import
PhoenixNazarov Apr 10, 2025
04f863b
Remove not user
PhoenixNazarov Apr 14, 2025
5b80304
Add cases and export json schema
PhoenixNazarov Apr 16, 2025
237318d
Create cases
PhoenixNazarov Apr 16, 2025
516deeb
Rename
PhoenixNazarov Apr 20, 2025
fd4e358
bugfix js
PhoenixNazarov Apr 20, 2025
3f7c081
Fix python3
PhoenixNazarov Apr 20, 2025
2de49dd
Merge pull request #3 from PhoenixNazarov/avalonia
PhoenixNazarov May 17, 2025
191d2d3
BugFix
PhoenixNazarov May 27, 2025
9069e2d
Add readme
PhoenixNazarov Jun 2, 2025
da9809c
Merge remote-tracking branch 'origin/main'
PhoenixNazarov Jun 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
422 changes: 422 additions & 0 deletions .github/workflows/code_generation_tests.yml

Large diffs are not rendered by default.

29 changes: 29 additions & 0 deletions .github/workflows/project_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: c# Tests and Coverage

on:
push:
pull_request:

jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up .NET SDK
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0

- name: Restore dependencies
run: |
dotnet restore

- name: Build the project
run: |
dotnet build --configuration Release

- name: Run tests with coverage
run: |
dotnet test --configuration Release --collect:"XPlat Code Coverage"
138 changes: 137 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,140 @@ TestResults
StaterV/bu
**/.svn
FBDK/FBParser/exp
.vs
.idea
.lib/*
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates

# Build results

[Dd]ebug/
[Rr]elease/
x64/
[Bb]in/
[Oo]bj/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.svclog
*.scc

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# Click-Once directory
publish/

# Publish Web Output
*.Publish.xml
*.pubxml
*.azurePubxml

# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
packages/
## TODO: If the tool you use requires repositories.config, also uncomment the next line
!packages/repositories.config

# Windows Azure Build Output
csx/
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
![Ss]tyle[Cc]op.targets
~$*
*~
*.dbmdl
*.[Pp]ublish.xml

*.publishsettings

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf

# =========================
# Windows detritus
# =========================

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Mac desktop service store files
.DS_Store

_NCrunch*
.vs=
**.received.**
9 changes: 9 additions & 0 deletions BasePlugin/BasePlugin.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

</Project>
5 changes: 5 additions & 0 deletions BasePlugin/Class1.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
namespace BasePlugin;

public class Class1
{
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CFuncGenerator</RootNamespace>
<AssemblyName>CFuncGenerator</AssemblyName>
<AssemblyName>CFuncGenerator1</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using PluginData;

namespace CFuncGenerator
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CFuncGenerator")]
[assembly: AssemblyTitle("CFuncGenerator1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CFuncGenerator")]
[assembly: AssemblyProduct("CFuncGenerator1")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CSharpCodeGenerator</RootNamespace>
<AssemblyName>CSharpCodeGenerator</AssemblyName>
<AssemblyName>CSharpCodeGenerator1</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<FileUpgradeFlags>
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CSharpCodeGenerator")]
[assembly: AssemblyTitle("CSharpCodeGenerator1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Michael Lukin")]
[assembly: AssemblyProduct("CSharpCodeGenerator")]
[assembly: AssemblyProduct("CSharpCodeGenerator1")]
[assembly: AssemblyCopyright("Copyright © Michael Lukin")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
Expand Down
108 changes: 108 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Stater: редактор конечного автомата

Stater — это мощное приложение, разработанное для упрощения создания, управления и выполнения конечных автоматов с использованием фреймворка C# Avalonia. Stater идеально подходит для разработчиков и дизайнеров, которые имеют дело со сложной логикой состояний. Stater предоставляет интуитивно понятный интерфейс для проектирования и управления конечными автоматами для различных приложений.

## Основные возможности

- **Управление проектами:** Легкое создание и управление проектами, содержащими несколько конечных автоматов.
- **Редактирование конечного автомата:** Проектирование конечных автоматов с состояниями, переходами и условиями.
- **Моделирование выполнения:** Моделирование переходов состояний и отслеживание изменений в реальном времени.
- **Отмена/повтор действий:** Предоставляет функцию отмены/повтора для легкой навигации по различным этапам проектирования конечного автомата.
- **Поддержка плагинов:** Расширение функциональности с помощью пользовательских плагинов.
- **Ведение журнала и отслеживание переменных:** Мониторинг выполнения и состояний переменных во время моделирования.

## Установка

Клонируйте репозиторий и создайте приложение с помощью .NET с фреймворком Avalonia.

```bash
dotnet build
dotnet run
```


## Использование

### Основные интерфейсы

Stater использует несколько ключевых интерфейсов для обеспечения своей функциональности:

- **`IProjectManager`**: управляет созданием проекта, загрузкой, сохранением и управлением конечными автоматами.
- **`IEditorManager`**: управляет взаимодействием пользователя с компонентами конечного автомата, такими как состояния, переходы и переменные.
- **`IExecutor`**: управляет моделированием выполнения конечных автоматов, включая запуск, остановку и пошаговое прохождение состояний.

### Пример: создание конечного автомата

Вот как можно программно создать конечный автомат и добавить состояния и переходы:

```csharp
var projectManager = new ProjectManager();
projectManager.CreateProject("Example Project");
var stateMachine = projectManager.CreateStateMachine();

var state1 = projectManager.CreateState();
var state2 = projectManager.CreateState();

var transition = projectManager.CreateTransition(state1, state2);

projectManager.UpdateStateMachine(stateMachine);
```

## Stater.CodeGeneration
Генерация исходного кода из моделей конечных автоматов с использованием шаблонов и языковых адаптеров.

Этот пакет предоставляет механизм генерации кода для различных языков программирования на основе внутренней модели автомата. Он гибко настраивается с помощью шаблонов и параметров генерации.

Для каждого сгенерированного кода необходимо установить соответсвующую библиотеку [stater-fsm-code](https://github.com/PhoenixNazarov/stater-fsm-code).

### Основные компоненты
- `CodeGenerator.cs`. Главная точка входа в процесс генерации. Координирует адаптеры, загрузку шаблонов и вывод итоговых файлов.
- `Entity/`. Модели данных, описывающие параметры генерации:
- `GenerationSettings.cs` — общие настройки генерации (язык, режим, путь и т.д.).
- `Language.cs` — перечисление поддерживаемых языков.
- `Mode.cs` — режимы генерации (например, с тестами / без тестов).
- `LanguageAdapter/`. Адаптеры для различных языков. Каждый из них отвечает за конкретный синтаксис, соглашения и поведение языка. Основаны на базовом классе `BaseLanguageAdapter`.
- `Base/`
- `BaseLanguageAdapter.cs` — абстрактный класс, реализующий общую логику адаптеров.
- `TemplateLoader.cs` — загрузка и обработка шаблонов Scriban.

### Языковые адаптеры:
- `CSharpAdapter.cs`
- `PythonAdapter.cs`
- `JavaAdapter.cs`
- `JavaScriptAdapter.cs`
- `TypeScriptAdapter.cs`
- `KotlinAdapter.cs`
- `CPlusPlusAdapter.cs`

`ScenarioFinder.cs`.

Утилита для нахождения и анализа сценариев в модели автомата — возможно используется для генерации тестов или автоматизации переходов.

`Stater.CodeGeneration.csproj`.

Файл проекта .NET с зависимостями, настройками сборки и т.д.

### Шаблоны: Templates/
Scriban-шаблоны, используемые при генерации:

`{language}.scriban` — основной шаблон генерации.

`{language}-test.scriban` — шаблон для генерации unit-тестов.

Поддерживаемые языки:

- `c#`, `python`, `java`, `javascript`, `typescript`, `kotlin`, `c++`

### Пример генерации
```c#
var settings = new GenerationSettings
{
Language = Language.CSharp,
OutputDirectory = "./Generated",
Mode = Mode.Full
};

var generator = new CodeGenerator();
generator.Generate(projectModel, settings);
```
3 changes: 3 additions & 0 deletions SpinVeriff/SpinPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
using StaterV.PluginManager;
using StaterV.StateMachine;

// TODO: practice NEED


namespace SpinVeriff
{
public class SpinPlugin : ButtonPlugin
Expand Down
Loading