# Ormentia Markus

> **⚠️ This project is currently under active development and may have bugs or incomplete features. Use at your own discretion.**

A modern, cross-platform markdown editor built with Avalonia UI and .NET 10.

![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)
![License](https://img.shields.io/badge/license-GPLv3-blue)
![.NET](https://img.shields.io/badge/.NET-10.0-purple)
![Status](https://img.shields.io/badge/status-under%20development-yellow)

## ✨ Features

- **Multi-tab Interface** - Work with multiple markdown files simultaneously
- **Live Preview** - Toggle between raw markdown and rendered preview
- **Rich Formatting** - Quick access to common markdown formatting (bold, italic, headings, lists, code, quotes)
- **Syntax Highlighting** - Code-aware editor with line numbers
- **Cross-Platform** - Runs on Windows, macOS, and Linux
- **Theme Support** - Toggle between light and dark modes
- **Adjustable Text Size** - Small, Medium, and Large text size options
- **PDF Export** - Export your markdown documents to PDF format
- **Session Persistence** - Automatically restores your open files and tabs

## 🚀 Quick Start

### Prerequisites

- [.NET 10.0 SDK](https://dotnet.microsoft.com/download) or later

### Installation

1. Clone the repository:
```bash
git clone https://github.com/yourusername/ormentia-markus.git
cd ormentia-markus/src/DesktopApp
```

2. Build the project:
```bash
dotnet build
```

3. Run the application:
```bash
dotnet run
```

### Building for Distribution

**macOS (ARM64):**
```bash
cd src/DesktopApp
dotnet publish -c Release -r osx-arm64
```

**macOS (Intel):**
```bash
cd src/DesktopApp
dotnet publish -c Release -r osx-x64
```

**Windows:**
```bash
cd src/DesktopApp
dotnet publish -c Release -r win-x64
```

**Linux:**
```bash
cd src/DesktopApp
dotnet publish -c Release -r linux-x64
```

## 📸 Screenshots

_Coming soon - Screenshots will be added as the UI stabilizes._

## 🏗️ Architecture

This application follows clean architecture principles with clear separation of concerns:

- **MVVM Pattern** - Using CommunityToolkit.Mvvm for data binding
- **Service Layer** - Business logic abstracted into testable services
- **Strategy Pattern** - Modular markdown rendering system
- **Dependency Injection** - Services injected via constructors

### Project Structure

```
ormentia-markus/
├── LICENSE              # GPLv3 License
├── README.md            # This file
└── src/
    └── DesktopApp/      # Main application code
        ├── Constants/   # Application-wide constants
        ├── Models/      # Domain models
        ├── Services/    # Business logic services
        ├── ViewModels/  # MVVM view models
        └── Views/       # UI components and renderers
```

The application uses:
- **MVVM Pattern** with CommunityToolkit.Mvvm
- **Service Layer** for business logic abstraction
- **Strategy Pattern** for modular markdown rendering
- **Dependency Injection** via constructor parameters

## 🛠️ Development

### Key Technologies

- **Avalonia UI 11.3.8** - Cross-platform UI framework
- **AvaloniaEdit 11.3.0** - Text editor with syntax highlighting
- **Markdig 0.43.0** - Markdown parsing
- **CommunityToolkit.Mvvm 8.2.1** - MVVM helpers
- **QuestPDF 2025.7.4** - PDF generation
- **Font Awesome** - Icon library

### Code Style

- XML documentation for all public APIs
- Nullable reference types enabled
- Consistent async/await patterns
- Constants instead of magic values

## 📋 Roadmap

- [ ] Spell checking
- [ ] Find and replace
- [ ] Export to HTML
- [ ] Custom theme colors
- [ ] Plugin system
- [ ] Git integration
- [ ] Local file browser for images
- [ ] Notification service for errors
- [ ] Settings persistence
- [ ] Recent files list
- [ ] Keyboard shortcuts customization
- [ ] Table insertion helper

## 🤝 Contributing

Contributions are welcome! Please follow these guidelines:

1. Follow the established architecture patterns
2. Add XML documentation for all public APIs
3. Use services for business logic
4. Keep ViewModels focused on presentation
5. Add constants instead of magic values
6. Maintain error handling consistency

## 📄 License

This project is licensed under the GNU General Public License v3.0 (GPLv3). See the [LICENSE](LICENSE) file for details.

## 🙏 Acknowledgments

- Built with [Avalonia UI](https://avaloniaui.net/)
- Markdown parsing by [Markdig](https://github.com/xoofx/markdig)
- Icons by [Font Awesome](https://fontawesome.com/)

---

**Note**: This project is under active development. Features may change, and bugs may exist. Please report issues on GitHub.
