Test ran at 2025-10-03 01:02:19.118521+00:00
SOLUTION:
lsystem_editor=1.0.0: L-Systems editor in Ada
Origin: commit b01f05b870b2eb91e95f4868e259d9208afdbe34 from https://github.com/Heziode/lsystem-editor
Properties:
Author: Heziode
Description: L-Systems editor in Ada
Executable: lsystem-editor
License: MIT
Long_Description:
# L-System Editor
A comprehensive graphical and command-line editor for creating, manipulating, and visualizing Lindenmayer systems (L-systems).
This project was initially developed as part of a university project.
## What are L-Systems?
L-systems (Lindenmayer systems) are a type of formal grammar introduced by biologist Aristid Lindenmayer in 1968. They are particularly useful for modeling plant growth and generating fractals. An L-system consists of:
- An **alphabet** of symbols that can be used to make strings
- An **axiom** (initial string) to start with
- A set of **production rules** that expand each symbol into a larger string of symbols
Through recursive application of these rules, complex structures can be generated from simple initial conditions.
## Features
- **Interactive GUI** for creating and editing L-systems
- **Command-line interface** for batch processing and automated workflows
- **Real-time visualization** of the L-system at different development levels
- **Export capabilities** to PS (PostScript) format for now
- **Customizable rendering** with adjustable parameters (colors, margins, dimensions)
- **Save and load** L-system definitions using `.ls` files
## Installation
### Using Alire (recommended)
```
alr install lsystem_editor
```
### From Source
1. Ensure you have Ada and GtkAda installed. This project depends on GNAT Lib.
2. Clone the repository: `git clone https://github.com/Heziode/lsystem-editor.git`
3. Build with Alire: `alr build` or manually with `make`
## Usage
### GUI Mode
Launch the graphical interface:
```
./bin/lsystem_editor
# Or
alr run
```
The GUI offers:
- A text editor area for defining L-system rules
- Controls to adjust the development level
- Real-time visualization of the L-system
- Export options
- Customization of colors and rendering parameters
### Command-Line Mode
For automated processing or batch operations:
```
lsystem_editor --no-gui [OPTIONS]
```
#### Command-Line Options
| Option | Long Form | Description |
|--------|-----------|-------------|
| `-i` | `--input=FILE` | Input file containing an L-system definition |
| `-o` | `--output=FILE` | Output file to store an L-system definition |
| `-e` | `--export=FORMAT` | Export format for the L-system representation |
| `-p` | `--export-file=FILE` | Output file for the exported representation |
| `-d` | `--develop=N` | Number of development steps to apply |
| `-w` | `--width=N` | Width of the output representation |
| `-h` | `--height=N` | Height of the output representation |
| `-b` | `--background-color=COLOR` | Background color in hex format (e.g., #AABBCC) |
| `-f` | `--foreground-color=COLOR` | Foreground color in hex format (e.g., #AABBCC) |
| `-mt` | `--margin-top=N` | Top margin for rendering |
| `-mr` | `--margin-right=N` | Right margin for rendering |
| `-mb` | `--margin-bottom=N` | Bottom margin for rendering |
| `-ml` | `--margin-left=N` | Left margin for rendering |
## L-System File Format
L-system definitions are stored in `.ls` files with the following syntax:
```
[angle in degrees]
[initial string]
[symbol] [replacement string]
[symbol] [replacement string]
...
```
### Example L-System: Koch Curve
```
60.0
-F++F++F
F F-F++F-F
```
Where:
- `F` means "draw forward"
- `+` means "turn left by angle"
- `-` means "turn right by angle"
## Controls in GUI Mode
- **Text Editor**: Define and edit your L-system
- **Validate Button**: Check if your L-system definition is valid
- **Level Spinner**: Adjust the development level
- **Color Controls**: Change foreground and background colors
- **Export Options**: Save visualizations
## License
L-System Editor is distributed under the MIT License.
Copyright (c) 2018 Quentin Dauprat (Heziode)
See the [LICENSE](https://github.com/Heziode/lsystem-editor/blob/master/LICENSE) file for full details.
Maintainer: Heziode
Maintainers_Logins: heziode
Name: lsystem_editor
Project_File: LSystem_Editor.gpr
Tag: gtk
Tag: gtk3
Tag: ada
Tag: l-systems
Tag: gtkada
Tag: l-system
Tag: editor
Tag: gui
Version: 1.0.0
Website: https://github.com/Heziode/lsystem-editor
Dependencies (direct):
gtkada^25.0.1
resources~0.1.0
Dependencies (solution):
gtkada=25.0.1
libgtk3=3.24.49
make=4.4.1
pkg_config=0.29.2
resources=0.1.0
Dependencies (graph):
gtkada=25.0.1 --> libgtk3=3.24.49 (>=3.24.24)
gtkada=25.0.1 --> make=4.4.1 (*)
gtkada=25.0.1 --> pkg_config=0.29.2 (*)
lsystem_editor=1.0.0 --> gtkada=25.0.1 (^25.0.1)
lsystem_editor=1.0.0 --> resources=0.1.0 (~0.1.0)
LOG:
[alr test] Testing lsystem_editor=1.0.0
[alr test] Spawning retrieval for remote crate: alr -d -n get lsystem_editor=1.0.0
Can't find C:\Strawberry\perl\bin\pkg-config on PATH, '.' not in PATH.
Note: Deploying lsystem_editor=1.0.0...
Note: Deploying resources=0.1.0...
lsystem_editor=1.0.0 successfully retrieved.
Dependencies were solved as follows:
+ gtkada 25.0.1 (new)
+b libgtk3 3.24.49 (new,indirect,system package)
+b make 4.4.1 (new,indirect,system package)
+b pkg_config 0.29.2 (new,indirect,system package)
+ resources 0.1.0 (new)
[alr test] Spawning default test for remote crate: alr -d -n build --release -- -cargs:Ada -gnatwn
Note: Building lsystem_editor=1.0.0/LSystem_Editor.gpr...
Setup
[mkdir] object directory for project Resources
[mkdir] library directory for project Resources
[mkdir] object directory for project Lsystem_Editor
[mkdir] exec directory for project Lsystem_Editor
Compile
[Ada] main.adb
[C] whereami.c
[Ada] resources.adb
[Ada] lse.ads
[Ada] lse-model.ads
[Ada] lse-model-io.ads
[Ada] lse-model-io-drawing_area.ads
[Ada] lse-model-io-drawing_area-drawing_area_ptr.ads
[Ada] lse-model-io-drawing_area_factory.adb
[Ada] lse-model-io-text_file.adb
[Ada] lse-model-io-turtle.adb
[Ada] lse-model-io-turtle_utils.ads
[Ada] lse-model-l_system.ads
[Ada] lse-model-l_system-concrete_builder.adb
[Ada] lse-model-l_system-l_system.adb
[Ada] lse-presenter.ads
[Ada] lse-presenter-presenter.adb
[Ada] lse-view.ads
[Ada] lse-view-view.adb
[Ada] lse_resources.ads
[Ada] lse-utils.ads
[Ada] lse-utils-coordinate_2d.adb
[Ada] lse-utils-utils.ads
[Ada] lse-model-io-drawing_area-postscript.adb
[Ada] lse-utils-coordinate_2d_ptr.ads
[Ada] lse-utils-angle.adb
[Ada] lse-utils-coordinate_2d_list.ads
[Ada] lse-model-grammar.ads
[Ada] lse-model-grammar-symbol.adb
[Ada] lse-model-grammar-symbol_utils.ads
[Ada] lse-model-interpreter.ads
[Ada] lse-model-l_system-growth_rule_utils.ads
[Ada] lsystem_editor_config.ads
[Ada] lse-io.ads
[Ada] lse-io-export_factory.adb
[Ada] lse-utils-colors.adb
[Ada] lse-model-l_system-l_system_ptr.ads
[Ada] lse-model-l_system-error.adb
[Ada] lse-model-l_system-error-invalid_rule.adb
[Ada] lse-model-l_system-error-missing_angle.adb
[Ada] lse-model-l_system-error-missing_axiom.adb
[Ada] lse-model-l_system-error-missing_restore.adb
[Ada] lse-model-l_system-error-missing_rule.adb
[Ada] lse-model-l_system-error-missing_save.adb
[Ada] lse-model-l_system-error-not_a_angle.adb
[Ada] lse-model-l_system-error-unexpected_character.adb
[Ada] lse-model-l_system-factory.adb
[Ada] lse-io-drawing_area.adb
[Ada] lse-view-callbacks.adb
[Ada] lse-model-l_system-growth_rule.adb
[Ada] lse-model-grammar-symbol-logoangleminus.adb
[Ada] lse-model-grammar-symbol-logoangleplus.adb
[Ada] lse-model-grammar-symbol-logoforward.adb
[Ada] lse-model-grammar-symbol-logoforwardtrace.adb
[Ada] lse-model-grammar-symbol-logopositionrestore.adb
[Ada] lse-model-grammar-symbol-logopositionsave.adb
[Ada] lse-model-grammar-symbol-logouturn.adb
[Ada] lse-model-grammar-symbol-othersymbol.adb
Build Libraries
[gprlib] Resources.lexch
[archive] libResources.a
[index] libResources.a
Bind
[gprbind] main.bexch
[Ada] main.ali
Link
[link] main.adb
Success: Build finished successfully in 21.65 seconds.
Found declared GPR file: LSystem_Editor.gpr
[alr test] Test completed SUCCESSFULLY